[Python]网络数据采集概述(4)—爬虫仿浏览器访问

修改请求头

请求头中常用内容:

属性内容
Hosthttps://www.google.com/
Connectionkeep-alive
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
User-AgentMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Referrerhttps://www.google.com/
Accept-Encodinggzip,deflate,sdch
Accept-Languageen-US,en;q=0.8

Python 爬虫在使用urllib 标准库时,都会发送如下的请求头:

属性内容
Accept-Encodingidentity
User-AgentPython-urllib/3.4

一般网站他通过User-Agent来判别是否是机器人访问。可如下设置:

from bs4 import BeautifulSoup
session = requests.Session()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)
AppleWebKit 537.36 (KHTML, like Gecko) Chrome",
"Accept":"text/html,application/xhtml+xml,application/xml;
q=0.9,image/webp,*/*;q=0.8"}
url = "https://www.whatismybrowser.com/
developers/what-http-headers-is-my-browser-sending"
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text)
print(bsObj.find("table",{"class":"table-striped"}).get_text)

处理Cookie

EditThisCookie是一款可以查看网站Cookie的Chrome插件

如果Cookie是基于网页事件,可以使用Selenium 和PhantomJS 包

查看网页Cookie方法如下:

from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='<Path to Phantom JS>')
driver.get("http://pythonscraping.com")
driver.implicitly_wait(1)
print(driver.get_cookies())

其他Cookie处理方法:

from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='<Path to Phantom JS>')
driver.get("http://pythonscraping.com")
driver.implicitly_wait(1)
print(driver.get_cookies())
savedCookies = driver.get_cookies()
driver2 = webdriver.PhantomJS(executable_path='<Path to Phantom JS>')
driver2.get("http://pythonscraping.com")
driver2.delete_all_cookies()
for cookie in savedCookies:
driver2.add_cookie(cookie)
driver2.get("http://pythonscraping.com")
driver.implicitly_wait(1)
print(driver2.get_cookies())

控制访问速度

如果请求资源频率过快,也可能引起服务器的封杀

可适当控制爬虫的访问速度,如下:

time.sleep(3)

隐含输入字段值

用隐含字段阻止网络数据采集的方式主要有两种。第一种是表单页面上的一个字段可以用服务器生成的随机变量表示。如果提交时这个值不在表单处理页面上,服务器就有理由认为这个提交不是从原始表单页面上提交的,而是由一个网络机器人直接提交到表单处理页面的。绕开这个问题的最佳方法就是,首先采集表单所在页面上生成的随机变量,然后再提交到表单处理页面。
第二种方式是“蜜罐”(honey pot)。如果表单里包含一个具有普通名称的隐含字段(设置蜜罐圈套),比如“用户名”(username)或“邮箱地址”(email address),设计不太好的网络机器人往往不管这个字段是不是对用户可见,直接填写这个字段并向服务器提交,这样就会中服务器的蜜罐圈套。服务器会把所有隐含字段的真实值(或者与表单提交页面的默认值不同的值)都忽略,而且填写隐含字段的访问用户也可能被网站封杀。
检查表单所在的页面十分必要,看看有没有遗漏或弄错一些服务器预先设定好
的隐含字段(蜜罐圈套)。如果你看到一些隐含字段,通常带有较大的随机字符串变量,那么很可能网络服务器会在表单提交的时候检查它们。另外,还有其他一些检查,用来保证这些当前生成的表单变量只被使用一次或是最近生成的(这样可以避免变量被简单地存储到一个程序中反复使用)。

问题检查列表

• 首先,如果从网络服务器收到的页面是空白的,缺少信息,或其遇到其他不符合预期的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的JavaScript执行有问题。
• 如果准备向网站提交表单或发出POST 请求,记得检查一下页面的内容,看看想提交的每个字段是不是都已经填好,而且格式也正确。
• 如果已经登录网站却不能保持登录状态,或者网站上出现了其他的“登录状态”异常,检查cookie。确认在加载每个页面时cookie 都被正确调用,而且cookie 在每次发起请求时都发送到了网站上。
• 如果在客户端遇到了HTTP 错误,尤其是403 禁止访问错误,这可能说明网站已经把当前IP 当作机器人了,不再接受你的任何请求。要么等待IP 地址从网站黑名单里移除,要么就换个IP 地址。如果确定自己并没有被封杀,那么再检查下面的内容。
1. 确认爬虫在网站上的速度不是特别快。快速采集是一种恶习,会对服务器造成沉重的负担,也是IP 被网站列入黑名单的首要原因。给爬虫增加延迟,让它们在夜深人静的时候运行。切记:匆匆忙忙写程序或收集数据都是拙劣项目管理的表现;应该提前做好计划,避免临阵慌乱。
2. 修改你的请求头!有些网站会封杀任何声称自己是爬虫的访问者。
3. 确认没有点击或访问任何人类用户通常不能点击或接入的信息。


参考书籍:
《Python网络数据采集》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vi_NSN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值