数据安全是个社会问题,爬与反爬的道德、法律、社会意义不说,本文只说技术。爬虫分三类: 通用(数据的抓取),聚焦(数据的分析),增式(数据的更新).
反爬机制:可以通过robots.txt文件查看。
比如京东的:https://www.jd.com/robots.txt
1.UA检测 网站通过user-agent可以知道现在访问的客户端是程序还是浏览器。而如果想伪装成浏览器,只需在添加header中添加 user-Agent。比如我的
浏览器:user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36
word=input('enter a key:')
url='https://www.sogou.com/web'
params={
'query':word
}
#UA伪装
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
response=requests.get(url=url,params=params,headers=headers)
response.encoding='utf-8' #手动修改编码
page_text=response.text
fileName=word+'.html'
with open(fileName,'w',encoding='utf-8')as fp:
fp.write(page_text)
print(word,'下载成功')
把这个user-Agent放到url的请求参数中即可。
2.动态加载数据
对于一个陌生的网站进行数据爬取前必须要做的事就是判断数据是否为动态加载的数据。可以用浏览器抓包工具 用来验证。 做法就是用浏览器发一个url请求,看respones 回应是否有你想要的数据。其实很多情况下非也,那么这种通过非浏览器地址栏请求到的数据就叫动态加载数据。
方法:发url->基于抓包工具->全局搜索->定位->请求的包
定位后看response,解析response里的json
#url='https://movie.douban.com/j/new_search_subjects'
#参数动态化
params = {
"sort":"U",
"range": "0,10",
"tags":" " ,
"start": "0",
"genres": "历史",
"countries": "伊朗",
}
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
response=requests.get(url=url,headers=headers,params=params)
page_text=response.json()
print(page_text)
for dic in page_text:
name=dic['data']
print(name)