一、需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)
爬取指定词条的整个网页
UA检测
UA假装
1 # UA:User-Agent(请求载体的身份标识)
2 # UA检测:.门户网站的服务器会检测对应请求的载体身份标识.若是检测到请求的载体身份标识为某一款浏览器
3 # 说明该请求是一个正常的请求,若是检测到请求的载体身份标识不基于某款浏览器的,则表示该请求就颇有可能
4 # 为不正常的请求,服务端就会拒绝该次请求。
5 #
6 # UA假装:让爬虫对应的请求载体身份标识假装成某一款浏览器
7 if __name__ == '__main__': 8 # UA假装:将对应的Useer-Agent封装到一个字典中
9 headers = { 10 "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
11 } 12 url = "https://www.sogou.com/web"
13 # 处理URL的参数,封装到字典中
14 value = input("请输入一个关键词:") 15 param = { 16 "query":value, 17 } 18 # 使用如下方法把参数和UA假装的头部封装到url中,并获得响应
19 response = requests.get(url=url,params=param,headers=headers ) 20 text = response.text 21 filename = value+".html"
22 with open(filename,"w",encoding="utf-8") as f: 23 f.write(text) 24 print("保存成功")
二、需求:破解百度翻译
爬取须要翻译内容的ajax的响应
从网页的检查窗口的network中的XHR中能够看到ajax发送的请求,咱们要作的就是模仿ajax向服务器发送请求,接收数据
post请求(携带了数据data)(须要翻译的内容)
响应的数据是json类型
1 if __name__ == '__main__': 2 # URL
3 url = 'https://fanyi.baidu.com/sug'
4 # 发送的数据
5 value = input("输入要翻译的关键词:") 6 data = { 7 'kw':value, 8 } 9 # UA假装
10 headers = { 11 "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
12 } 13 # 发送请求
14 response = requests.post(url,data=data,headers=headers) 15 # 接收到的数据是一个json数据的话,才能用.json方法,返回的是一个json对象
16 dic_obj = response.json() 17 # 持久化存储 (存到文件中)
18 filename = value+".json"
19 f = open(filename,"w",encoding="utf-8") 20 json.dump(dic_obj,f,ensure_ascii=False) 21 f.close() 22 print("结束")
三、需求:爬取豆瓣电影分类排行榜https://movie.douban.com/中的电影详情数据
爬取某一部分电影的ajax的响应
get请求(携带了参数param)(从哪一部电影开始,一次请求多少个电影)
响应的数据是json类型
1 if __name__ == '__main__': 2 url = "https://movie.douban.com/j/chart/top_list"
3 param = { 4 'type': '24', 5 'interval_id': '100:90', 6 'action': "", 7 'start': '0', # 从第几个电影开始取
8 'limit': '20', # 一次取多少个电影
9 } 10 # UA假装
11 headers = { 12 "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
13 } 14 # 发送get请求
15 response = requests.get(url=url,params=param,headers=headers) 16 # 接受json数据
17 dic_obj = response.json() 18 # 持久化储存
19 filename = '豆瓣喜剧电影'+param["start"]+"-"+param["limit"]+".json"
20 f = open(filename,"w",encoding="utf-8") 21 json.dump(dic_obj,f,ensure_ascii=False) 22 f.close() 23 print("结束")
四、需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据
1 if __name__ == '__main__': 2 url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
3 city = input("请输入城市名:") 4 data = { 5 'cname':"", 6 'pid':"", 7 'keyword': city, # 城市名
8 'pageIndex': '1', # 第几页
9 'pageSize': '10', # 一页的个数
10 } 11 headers = { 12 "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
13 } 14 response = requests.post(url,data,headers) 15 text = response.text 16 filename = city + '.txt'
17 with open(filename,"w",encoding="utf-8") as f: 18 f.write(text) 19 print("结束")
五、需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据http://125.35.6.84:81
http://scxk.nmpa.gov.cn:81/xk/
-动态加载数据
-首页中对应的企业信息数据是经过ajax动态请求到的。
http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList
-经过对详情页url的观察发现:
- url的域名都是同样的,只有携带的参数(id)不同
-id值能够从首页对应的ajax请求到的json中获取
- 域名和id值能够拼接成对应完整企业详情页的url
-详情页的企业详情数据也是动态加载出来的
- http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById
-观察后发现
- 全部的post请求的url都是同样的,只有参数id值是不一样。
- 若是咱们能够批量获取多家企业的id后,就能够将id和url造成一个完整的详情页对应详情页的url
1 if __name__ == '__main__': 2 headers = { 3 "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
4 } 5 url_index = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList"
6 id_list = [] 7 # 前五页的数据
8 for page in range(1,5): 9 page = str(page) 10 data = { 11 'on': 'true', 12 'page': page, # 当前页
13 'pageSize': '15', # 一页有多少条数据
14 'productName':'', 15 'conditionType': '1', 16 'applyname':'', 17 'applysn':'', 18 } 19 # 当前页的字典类型的json数据
20 json_dic_index = requests.post(url=url_index,headers=headers,data=data).json() 21 for i in json_dic_index["list"]: 22 id_list.append(i["ID"]) 23 url_detail = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
24 detail_list = [] 25 for id in id_list: 26 data = { 27 "id":id, 28 } 29 json_dic_detail = requests.post(url=url_detail, headers=headers, data=data).json() 30 detail_list.append(json_dic_detail) 31 # 持久化存储
32 f = open("./化妆品企业详情.json","w",encoding="utf-8") 33 json.dump(detail_list,fp=f,ensure_ascii=False) 34 f.close() 35 print("结束")