爬虫:获取页面 -- request库的使用

摘要

requests是一个封装了python自带的urllib模块的一个易用型模块,它使得程序员对发送请求和获取响应等http操作的代码编写更加简单。

说明

以下代码均默认已导入相关模块:

import requests

获取页面

基本步骤如下:

  1. 设置请求头信息,一般是改变user-agent

  2. 通过get()方法获取页面信息

  3. 判断是否发生异常

  4. 如无异常返回页面的文本或者二进制信息

以下是一个获取目标页面的方法:

    def getHTMLText(url):
    '获取目标页面'
    try:
        kv = {"user-agent":"Mozilla/5.0"} # 设置user-agent
        r = requests.get(url, timeout=30) # 获取页面,设置超时时间为30s
        r.raise_for_status() # 如果状态码不是200,引发HTTPError异常
        r.encoding = r.apparent_encoding  # 设置编码会页面的正确编码
        return r.text  # 如果需要二进制信息,应该使用r.content
    except:
        return '产生异常'

上面代码实现了一个获取目标页面的方法,我们可以使用这个方法进行一些测试,比如:

访问京东的一个商品页面:

    url = "https://item.jd.com/2967929.html"
    text = getHTMLText(url)
    print(text[:1000]) # 输出前面1000个字符的信息

访问亚马逊的一个商品页面:

    url = "https://www.amazon.cn/dp/B0083DP0CY?_encoding=UTF8&ref_=pc_cxrd_658409051_recTab_658409051_t_1&pf_rd_p=610d12d5-867d-4582-81bc-05492d242e3f&pf_rd_s=merchandised-search-3&pf_rd_t=101&pf_rd_i=658409051&pf_rd_m=A1AJ19PSB66TGU&pf_rd_r=QT2Q1KC61VNBDYMHX928&pf_rd_r=QT2Q1KC61VNBDYMHX928&pf_rd_p=610d12d5-867d-4582-81bc-05492d242e3f"
    text = getHTMLText(url)
    print(text[:1000]) # 输出前面1000个字符的信息

可以发现,上面两个例子的代码除了url外是相同的,不过这两个网站实际上又是有所不同的,就是京东不会限制python程序的访问,而亚马逊会。在这里,网站服务器是通过判断请求头的User-Agent字段来判断是否是浏览器访问,如果不是,可能会被网站禁止访问。所有,最好在发送请求之前先设置好User-Agent。
User-Agent的设置:r = requests.get(url, headers={"User-Agent":"Mozilla/5.0"})
查看当前请求头信息:r.headers

posted @ 2018-09-06 22:40  web_小隆  阅读(1901)  评论(0编辑  收藏  举报