概述
======= 个人摸索向,只是一次小小的记录:) =======
重新温习一下被放下太久的Python爬虫技能,这次试着爬一下ID:INVADED 异度侵入贴吧的图片。(今晚还要等着最后一集更新呢…
环境及涉及库
- Python3.6
- urllib
- requests
- re
内容
- 爬取过程
urllib
库和requests
库的区分
页面获取
首先随便进入一个 帖子,都是官推图,就选你了。
帖子一进去界面长这样。
然后键盘按下F12,打开浏览器控制台,再刷新界面。在Network分类下,观察到控制台显示了页面中各项的请求和回应报文详情。随便点击一个项,可以在其右侧的Headers中找到Request Headers的信息。
先说明一下为什么要找这个Headers信息,为了维护各公司网站的资源,现在各网站大都配有反爬虫机制,就是为了防止网站资源被随意批量的窃取。如果你的ip连续多次访问某一含反爬虫机制的网站,你的ip就会被网站检测到,并限制你的ip访问或是将你的ip访问禁止。
所以这就需要我们每次访问都变更自己的ip或是将我们的访问伪装成浏览器访问。
变更ip可以使用高匿的ip代理,这里推荐一个网站 西刺代理,里面有各种国内免费高匿ip供你选择,就是质量不太好,因为是免费… 经常要更换,并且还要看脸…所以在这里不推荐使用第一种方法。
现在的反爬虫绕过的普遍方法还是伪装成浏览器访问,而伪装成浏览器就只需伪装浏览器的请求报文中的Headers即可。所以 用浏览器查看请求报文的内容就是为了反爬虫绕过啦。
回到正题 ,伪装Headers其实最重要的就是伪装User-Agent这一项,或者再加上Host字段。
在Py文件中创建一个Headers
字典,分别将这两项的名称和内容作为键和键值。这样我们的请求头就构建好啦。
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64)\
AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
'Host': 'tieba.baidu.com'
}
开始获取页面信息,先import requests
,使用get
方法进行获取。
def getHtml(url,headers):
try:
r=requests.get(url,headers)
r.encoding='utf8' # 将对象编码转换成UTF-8编码
html=r.text
except:
print("failed to geturl") # 如果网络连接异常,则报错。
else:
return html
来先尝试一下能不能成功获取到html文本,输入以下代码测试。
t=getHtml(url,headers).text
print(t)
结果如下:
嗯,获取成功!
目标提取
要在这些获取到的html文本中找到帖子中的图片链接,需要用到正则表达式的方法(当然也可以用BeautifulSoup匹配)。首先import re
,回到浏览器控制台,在Element