爬虫:获取页面 -- request库的使用
摘要
requests是一个封装了python自带的urllib模块的一个易用型模块,它使得程序员对发送请求和获取响应等http操作的代码编写更加简单。
说明
以下代码均默认已导入相关模块:
import requests
获取页面
基本步骤如下:
-
设置请求头信息,一般是改变user-agent
-
通过get()方法获取页面信息
-
判断是否发生异常
-
如无异常返回页面的文本或者二进制信息
以下是一个获取目标页面的方法:
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