Python爬虫

Python爬虫 知识量:11 - 28 - 71

1.2 获取响应内容><

获取网页的内容- 1.2.1 -

使用Requests库获取某个网页的内容,可以按照以下步骤进行操作:

1. 导入Requests库:

import requests

2. 发送GET请求:使用requests.get()方法发送GET请求,并将URL作为参数传递。

response = requests.get('https://www.example.com')

3. 获取响应内容:通过response.text属性获取响应的内容,它将以字符串形式返回网页的HTML代码。

content = response.text  
print(content)

在上述代码中,response对象是Requests库返回的一个HTTP响应对象,它具有许多有用的属性和方法。除了response.text之外,response对象还具有以下常用属性:

  • response.status_code:返回HTTP状态码,例如200、404等。

  • response.headers:返回响应头信息的字典。

  • response.cookies:返回响应的Cookie信息。

  • response.elapsed:返回响应所花费的时间(以时间对象的形式)。

  • response.url:返回响应的URL。

  • response.history:返回重定向历史的列表,如果有重定向的话。

  • response.raise_for_status():如果响应状态码表示错误,该方法将引发一个HTTPError异常。

传递URL参数- 1.2.2 -

在Requests库中,可以使用params参数将查询字符串参数添加到URL中。params参数接受一个字典,其中键/值对表示要添加到查询字符串中的参数。

以下是一个示例,演示如何使用params参数向URL添加查询字符串参数:

import requests  
  
url = 'http://httpbin.org/get'  
params = {'key1': 'value1', 'key2': 'value2'}  
response = requests.get(url, params=params)  
  
print(response.text)

在上面的示例中,首先定义了一个URL http://httpbin.org/get,然后创建了一个包含键/值对的字典 params。接下来,将 params 字典作为 params 参数传递给 requests.get() 函数。这样,查询字符串参数就会被自动添加到URL中,生成完整的URL。最后,打印出响应的内容。

使用 params 参数添加查询字符串参数时,Requests库会自动对参数进行URL编码,以确保它们正确地附加到URL上。

定制请求头- 1.2.3 -

请求头Headers提供了关于请求、响应或其他发送实体的信息。如果没有指定请求头或请求的请求头和实际网页不一致,就可能无法返回正确的结果。此外,不同的网站可能会根据请求头的信息进行反爬虫处理,因此,找到正确的Headers对于网络爬虫来说非常重要。以下是一些找到正确Headers的方法:

  1. 使用开发者工具:大多数浏览器都提供了开发者工具,可以查看发送的请求头信息。在Chrome浏览器中,可以通过按F12键打开开发者工具,然后选择"Network"选项卡,在页面上刷新页面或触发请求,即可看到发送的请求头信息。

  2. 模拟浏览器行为:使用像Selenium这样的自动化测试工具,模拟真实用户的浏览器行为,捕获浏览器发送的请求头信息。

  3. 使用第三方工具:有一些第三方工具有助于找到正确的Headers,例如Headers Editor、HeaderSpy等。这些工具可以修改请求头信息,并显示修改后的请求头信息。

  4. 分析目标网站的响应:如果无法直接获取请求头信息,可以通过分析目标网站的响应来推断出正确的Headers。例如,可以发送一个简单的GET请求,并查看响应中的"Set-Cookie"和"WWW-Authenticate"等头信息,从而推断出需要添加的其他请求头信息。

无论使用哪种方法,都需要确保所获取的请求头信息与目标网站的实际要求一致,否则可能会被视为非法的爬虫请求而被拒绝。因此,建议在发送请求之前仔细检查和测试所获取的Headers是否正确。

发送POST请求- 1.2.4 -

除了GET请求外,有时还需要发送一些编码为表单形式的数据,如在登录的时候请求就为POST,因为如果用GET请求,密码就会显示在URL中,这是非常不安全的。

当需要发送POST请求并传递表单数据时,可以使用data参数将数据字典传递给requests.post()函数。Requests库会自动将数据字典编码为表单形式,并将其包含在POST请求的主体中。

以下是一个示例,演示如何使用data参数发送POST请求:

import requests  
  
url = 'http://pnotes.cn/post'  
data = {'key1': 'value1', 'key2': 'value2'}  
response = requests.post(url, data=data)  
  
print(response.text)

在上面的示例中,首先定义了一个URL http://pnotes.cn/post,然后创建了一个包含键/值对的字典 data。接下来,将 data 字典作为 data 参数传递给 requests.post() 函数。这样,表单数据就会被自动编码并附加到POST请求的主体中。最后,打印出响应的内容。

需要注意的是,当使用data参数发送POST请求时,数据将被编码为application/x-www-form-urlencoded格式。如果需要发送JSON格式的数据,可以使用json参数而不是data参数,并将数据传递给该参数。Requests库会自动将数据编码为JSON格式,并将其包含在POST请求的主体中。

超时- 1.2.5 -

设置合适的超时时间对于爬虫程序来说是非常重要的,尤其是在爬取大量网页时。超时设置可以确保爬虫在遇到响应缓慢或无法响应的服务器时不会无限期地等待,从而提高爬虫的效率和稳定性。

在Requests库中,可以通过设置timeout参数来指定超时时间。timeout参数可以是一个浮点数或一个包含两个浮点数的元组。当timeout是一个浮点数时,它同时指定了连接超时和读取超时的值。当timeout是一个元组时,第一个元素是连接超时,第二个元素是读取超时。

以下是一个示例,演示如何使用timeout参数设置超时时间:

import requests  
  
url = 'http://example.com'  
timeout = 10.0  # 设置超时时间为10秒  
  
try:  
    response = requests.get(url, timeout=timeout)  
    # 处理响应内容  
    print(response.text)  
except requests.exceptions.Timeout:  
    # 超时异常处理  
    print('请求超时!')  
except requests.exceptions.RequestException as e:  
    # 其他请求异常处理  
    print(f'请求发生异常: {e}')

在上面的示例中,如果服务器在10秒内没有响应,requests.get()函数将引发一个requests.exceptions.Timeout异常。通过捕获这个异常,可以对超时情况进行适当的处理,例如重试请求、跳过该URL或记录错误信息。

此外,requests.exceptions.RequestException是所有Requests库异常的基类,可以用它来捕获所有与请求相关的异常。这样,即使发生了不是超时的其他类型的请求异常,也能捕获并处理它们。