爬虫
网页采集器
# coding:utf-8
#UA:User-Agent (请求载体的身份标识)
# #UA检测:门户网站的服务i去会检测请求载体身份表示,如果检测到请求载体的身份标识为浏览器
# 说明为正常请求。但是检测身份标识不是浏览器的,则表示该请求不是正常请求(爬虫)
# 则服务器拒绝该次请求
#UA伪装:让爬虫对应的身份载体为浏览器
import requests
if __name__ == '__main__':
#UA伪装:将对应的User-Afent封装到字典中
headers = {
'User-Agent':'用抓包填写模拟浏览器地址'
}
url = 'https://www.sogou.com/web'
#处理url携带参数:封装到字典中
kw = input('enter a word:')
param = {
'query':kw
}
#发起请求 对制定的url是带参数的,并且请求中处理了参数
response = requests.get(url=url, params=param, headers= headers)#动态拼接参数
page_text = response.text
fileName = kw+'.html'
with open(fileName, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print(fileName, '保存成功')
问题
到这该学fiddler抓包了
解决了,稍微了解抓包,用f12就可以进行模拟浏览器
破解百度翻译
post请求(携带参数)
响应数据是json数据
# coding:utf-8
import requests
import json
if __name__ =='__main__':
#指定url
post_url = 'https://fanyi.baidu.com/sug'
#post请求参数处理(和get请求一致)
word = input('请输入一个单词:')
data = {
'kw':word
}
#进行UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}
#请求发送
response = requests.post(url=post_url, data=data)
#获取响应 json()方法返回的是obj(对象)(如果确认响应数据是json类型才能用)
dic_obj = response.json()
print(dic_obj)
#持久化储存
filename = word+'.json'
with open(filename, 'w', encoding='utf-8') as fp:
json.dump(dic_obj, fp=fp, ensure_ascii=False)
print('over')
豆瓣电影
# coding:utf-8
import requests
import json
if __name__ =='__main__':
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': '0',#从库中的第几个开始取
'limit': '20'#一次取几个
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}
response = requests.get(url=url, params=param, headers=headers) # 动态拼接参数
list_data = response.json()
with open('.\douban.json', 'w', encoding='utf-8') as fp:
json.dump(list_data, fp=fp, ensure_ascii=False)
print('over')
肯德基位置信息
# coding:utf-8
import requests
import json
if __name__ =='__main__':
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
loaltion = input('Please input loaltion:')
param = {
'cname': '',
'pid': '',
'keyword': loaltion,
'pageIndex': '1',#从库中的第几个开始取
'pageSize': '10'#一次取几个
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
}s
response = requests.get(url=url, params=param, headers=headers) # 动态拼接参数
page_text = response.text
filename = loaltion + '.text'
with open(filename, 'w', encoding='utf-8') as fp:
fp.write(page_text)
print('over')
药监总局相关数据
- 动态加载
- 首页中对应的企业数据信息是ajex动态请求的
- 通过对详情页url观察发现:
- url域名相同,只有携带的参数不同
- id值可以从首页对应的ajex请求到
- 域名和id值拼接一个完整的企业详情页url
观察发现:
所有详情页请求的url多一样,只有参数id不同
获取企业ij后, 就可以将url与id拼接形成完整的详情页数据对应的ajax请求的url
数据解析
聚焦爬虫:正则 bs4、xpath