简单爬虫的理解应用
爬虫:通过模拟浏览器进行上网,去网络上抓取数据的过程
爬虫广义分为:通用爬虫、聚焦爬虫
通过requests模块实## 简单的爬虫应用
爬虫:通过模拟浏览器进行上网,去网络上抓取数据的过程
爬虫广义分为:通用爬虫、聚焦爬虫
通过requests模块实现模拟浏览器发起的请求数据
requests的编码流程:
- 指定页面的url
- 发起请求:get post
- 获取响应的数据
- 存储在相应的文件或者内存中
get请求
requests.get(url,params,headers)
post请求
requests.post(url,data,headers)
请求参数动态化变化现模拟浏览器发起的请求数据
requests的编码流程:
- 指定页面的url
- 发起请求:get post
- 获取响应的数据
- 存储在相应的文件或者内存中
get请求
requests.get(url,params,headers)
post请求
requests.post(url,data,headers)
请求参数动态化变化
很多的情况下需要修改请求的参数,可以将请求的参数封装在一个字典中(键值对==请求参数),将字典作用到get的params和post的data参数中去,进行动态的参数的修改。如下代码所示,爬取的是搜狗的主页部分
# import requests
# url = 'https://www.sogou.com/web'
# #实现参数动态化
# wd = input("enter a key")
# params = {
# 'query':wd
# }
# res = requests.get(url = url,params=params)
# page_text = res.text
# filename = wd+ '.html'
# with open(filename,'w',encoding='utf-8') as fp:
# fp.write(page_text)
常见的反扒机制UA检测:
-
UA:网站进行请求身份的识别表示,服务器需要通过识别请求的UA来进行身份的识别,判断是否是爬虫请求还是浏览器请求。
-
反反扒策略:通过设置headers标签中的user-agent来进行UA的伪装,并且将封装的headers内容作为参数添加到请求中去
# headers = { # 'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' # }
如何针对一个陌生的网站进行爬取
- 判断这个网站所需要的数据是否是动态加载的
- 是:通过抓包进行全局的搜索,找到所需数据请求的url呵呵请求参数信息,进行聚焦爬虫的请求
- 不是:直接将网址作为我们需要requests请求的url即可
- 判断这个网站所需要的数据是否是动态加载的
案例
抓取搜狗的主界面
# #简单的通用爬虫
# import requests
# url = 'https://www.sogou.com/'
# response = requests.get(url = url)
# page_text = response.text
# with open('sougou.html','w',encoding='utf-8') as fp:
# fp.write(page_text)
定向抓取内容
# import requests
# url = 'https://www.sogou.com/web'
# #实现参数动态化
# wd = input("enter a key")
# params = {
# 'query':wd
# }
# res = requests.get(url = url,params=params)
# page_text = res.text
# filename = wd+ '.html'
# with open(filename,'w',encoding='utf-8') as fp:
# fp.write(page_text)
UA反反扒,解决部分乱码问题
# import requests
# url = 'https://www.sogou.com/web'
# #实现参数动态化
# wd = input("enter a key")
# params = {
# 'query':wd
# }
# headers = {
# 'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
# }
# res = requests.get(url = url,params=params,headers = headers)
# res.encoding = 'utf-8' #修改响应数据的编码格式
# page_text = res.text
# filename = wd+ '.html'
# with open(filename,'w',encoding='utf-8') as fp:
# fp.write(page_text)
抓取豆瓣的中电影详情数据的内容
# import requests
# url = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=20&limit=10'
# headers = {
# 'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
# }
# res = requests.get(url=url,headers=headers)
# page_text = res.json() #序列化好的对象
# for dic in page_text:
# print(dic['title'],dic['score'])
肯德基餐厅查询详情的内容
# url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
# for page in range(1,3):
# dic = {
# 'cname': '',
# 'pid': '',
# 'keyword': '北京',
# 'pageIndex': str(page),
# 'pageSize': '10'
# }
# res = requests.post(url=url,headers=headers,data=dic)
# print(res.json())