一、需求:爬取搜狗指定詞條對應的搜索結果頁面(簡易網頁採集器)
爬取指定詞條的整個網頁
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("結束")