Python中利用requests库和BeautifulSoup库实现Web抓取和数据爬取

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请求。例如:

import requests

# 发送一个GET请求
r = requests.get('https://www.baidu.com/')

# 发送一个POST请求
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('https://httpbin.org/post', data=payload)

print(r.status_code)
print(r.text)

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

BeautifulSoup库

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

from bs4 import BeautifulSoup

# 解析HTML文档
html_doc = '

这是一个标题

这是一段正文。

' soup = BeautifulSoup(html_doc, 'html.parser') # 获取HTML节点 print(soup.h1.string) print(soup.p['class'])

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

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

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
url = 'https://www.tripadvisor.cn/Restaurants-g188590-Amsterdam_North_Holland_Province.html'
r = requests.get(url)

# 解析HTML文档
soup = BeautifulSoup(r.content, 'html.parser')

# 提取信息
restaurant_list = []
listing = soup.find_all('div', {'class': 'wQjYiB7z'})
for l in listing:
    name = l.find('a', {'class': 'wQjYiB7z'}).text.strip()
    rating = float(l.find('span', {'class': 'r2Cf69qf'}).text.strip())
    review_count = int(l.find('a', {'class': 'wofh7u5n'}).text.strip()[:-3])
    restaurant_list.append({'name': name, 'rating': rating, 'review_count': review_count})

# 输出结果
for restaurant in restaurant_list:
    print('餐厅名称: %s,评分: %f,评论数量: %d' % (restaurant['name'], restaurant['rating'],restaurant['review_count']))

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

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

你可能感兴趣的:(数学建模,python,开发语言,pycharm)