当前位置:   article > 正文

Python中利用requests库和BeautifulSoup库实现Web抓取和数据爬取_如何使用python的requests库来获取html页面的内容,然后使用beautifulsoup

如何使用python的requests库来获取html页面的内容,然后使用beautifulsoup库来解析

requests库是一个Python的HTTP客户端库,它使得发送HTTP/1.1请求变得非常容易。requests库可以简化HTTP请求过程,例如为不同的请求方式提供不同的方法(比如GET和POST),自动对请求参数进行编码,设置请求头,设置cookies等。requests库还可以处理大多数HTTP响应。

BeautifulSoup是一个解析HTML和XML文档的Python库。它从HTML或XML文件中提取结构化数据,并非常适合于web抓取相关的应用程序。BeautifulSoup不仅可以处理不良的HTML(即不严格的标记语言),还可以从HTML文档中提取有价值的信息。

下面是对这两个库的使用进行详细的讲解:

requests库

使用requests库可以模拟HTTP/1.1请求。例如:

  1. import requests
  2. # 发送一个GET请求
  3. r = requests.get('https://www.baidu.com/')
  4. # 发送一个POST请求
  5. payload = {'key1': 'value1', 'key2': 'value2'}
  6. r = requests.post('https://httpbin.org/post', data=payload)
  7. print(r.status_code)
  8. print(r.text)

在上面的代码中,我们使用了requests库发送了两个HTTP/1.1请求。第一个请求是一个GET请求,我们将其发送到百度的主页。第二个请求是一个POST请求,我们提交了一个数据字典作为请求参数。每个请求都返回一个Response对象,我们可以通过该对象的属性来获取响应的数据。例如,我们可以使用status_code属性获得HTTP响应的状态码,使用text属性获取响应的文本数据。

BeautifulSoup库

使用BeautifulSoup库可以解析HTML和XML文档。例如:

  1. from bs4 import BeautifulSoup
  2. # 解析HTML文档
  3. html_doc = '<html><body><h1>这是一个标题</h1><p class="main">这是一段正文。</p></body></html>'
  4. soup = BeautifulSoup(html_doc, 'html.parser')
  5. # 获取HTML节点
  6. print(soup.h1.string)
  7. print(soup.p['class'])

在上面的代码中,我们使用BeautifulSoup库解析了一个HTML文档。我们使用’html.parser’解析器来解析HTML文档。我们可以使用soup对象的各种属性和方法来获取文档中的数据。例如,我们使用h1属性和string属性来获取标题的文本,使用p属性和’class’键来获取正文的CSS类名。

以下是一个结合使用requests库和BeautifulSoup库的示例程序:

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 发送HTTP请求
  4. url = 'https://www.tripadvisor.cn/Restaurants-g188590-Amsterdam_North_Holland_Province.html'
  5. r = requests.get(url)
  6. # 解析HTML文档
  7. soup = BeautifulSoup(r.content, 'html.parser')
  8. # 提取信息
  9. restaurant_list = []
  10. listing = soup.find_all('div', {'class': 'wQjYiB7z'})
  11. for l in listing:
  12. name = l.find('a', {'class': 'wQjYiB7z'}).text.strip()
  13. rating = float(l.find('span', {'class': 'r2Cf69qf'}).text.strip())
  14. review_count = int(l.find('a', {'class': 'wofh7u5n'}).text.strip()[:-3])
  15. restaurant_list.append({'name': name, 'rating': rating, 'review_count': review_count})
  16. # 输出结果
  17. for restaurant in restaurant_list:
  18. print('餐厅名称: %s,评分: %f,评论数量: %d' % (restaurant['name'], restaurant['rating'],restaurant['review_count']))

在上面的代码中,我们使用requests库发送了一个GET请求,获取了TripAdvisor网站上阿姆斯特丹地区的餐厅列表。然后,我们使用BeautifulSoup库解析HTML文档,并使用find_all()方法查找所有餐厅的信息。最后,我们从每个餐厅的HTML节点中提取信息并保存到一个列表中。最后,我们使用简单的格式化操作打印了每个餐厅的信息。

结合使用requests库和BeautifulSoup库可以使web抓取和数据爬取变得更加简单和高效。利用它们,我们可以自动从网站上收集有用的信息,并进行后续处理和分析。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/397332
推荐阅读
相关标签
  

闽ICP备14008679号