一、爬虫中的主要反-反爬虫操作
1.模拟用户行为
用户不会一直访问服务器,因此我们可以为程序设置随机休眠时间,这样可以让程序不定时访问服务器,避免服务器的反爬虫。
2.使用匿名代理
在间隔时间数据访问次数过多的IP会禁止访问。解决方法:通过代理 IP进行操作,将自己真实的IP隐藏起来。
3.请求伪装
通过User-agent信息的添加,添加到爬虫请求头信息中,伪装浏览器合法请求,同时为了提高访问质量,我们可以将多个User-agent随机操作,每次请求的User-agent可能会不一致,伪装了代理请求。
二、爬虫过程中问题及解决方法
1.下载运行需要的离线安装包
例如此处我们需要安装 pymysql的离线安装包,第一步,我们在pymysql官网下载(whl)文件;第二步,cmd到指定目录,此处我需要的是将其安装在Python27\Scripts路径下;第三步,在cmd控制台执行命令:pip install (whl)文件,等待安装,安装成功的话会出现安装成功的信息。类似需要的模块都可以通过此方法来安装
2.在安装模块的过程中出现编码问题
当python在window环境中通过pip安装模块时报这样的错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5,主要是因为python默认编码格式是:ascii。
解决方法:在python/lib/site.py中加入
import sys
reload(sys)
sys.setdefaultencoding('gbk')
问题解决。。。
3.抓包工具获取网页请求真实url
使用Fiddler抓包工具获取网页的真实url请求地址时,在分析完为真实url时,使用鼠标右键直接url地址。
4.抓包工具获取json数据
在Fildder抓包工具中,通过刷新网页获取带有js的数据请求包,分析其中带有哪个带有大量汉字的json数据,这个便是网页向服务器请求的js数据,拷贝url地址,删除其中的“callback=feedCardJsonpCallback&_”,接下来通过json语句获取文本内容
def parse(self, response):
print (u"开始采集数据...")
# json部分,获取body内容
r = response.body
# 转码json格式
r = json.loads(r)
# 获取数据data块中的内容
data = r["result"]["data"]
for iin data:
# 创建对象
item = XinlangItem()
# data字典中的ctime属性,并将获取的属性赋给对象
print i["ctime"],i["title"],i["intro"]
item["ctime"] = i["ctime"]
item["title"] = i["title"]
item["intro"] = i["intro"]
# 其中ctime、title、intro都是文本中的属性,根据文本内容而定。
5.scrapy爬虫框架图
5.python requests 爬虫百度
```
import requests
def run2():
url = "https://www.baidu.com/"
res = requests.get(url)
print(res.text.encode(res.encoding).decode('utf-8')) # 对原网页进行编解码
if __name__ == '__main__':
run2()
```