'''
爬蟲:經過編寫程序,模擬瀏覽器上網,讓其去互聯網上爬取數據的過程
分類:
通用爬蟲:爬取所有的頁面數據
聚焦爬蟲:抓取頁面中局部數據
增量式爬蟲:爬取網站中更新出的數據
反爬機制:門戶網站會經過制定相關的技術手段,組織爬蟲程序進行數據獲取
反反爬策略:針對反爬機制制定的策略,爲了獲取數據
第一個反爬機制:
robots.txt協議:防君子不防小人的協議
'''
'''
request使用流程:
- 制定url
- 發起請求
- 獲取響應回來的頁面數據
- 持久化存儲
'''
1 獲取搜狗頁面(反反爬機制:防君子不防小人)
import requests #獲取搜狗頁面數據 #1.指定url url='https://www.sogo.com/' #2.發起請求 response=requests.get(url=url) #3.獲取頁面數據 response_text=response.text #4.持久化存儲 with open('sogo.html',mode='w',encoding='utf8') as f: f.write(response_text)
2 獲取知乎頁面數據(UA假裝)html
'''
User-Agent:請求載體的身份標識
反爬機制:UA檢測
反反爬策略:UA假裝
'''
#請求知乎 url='https://www.zhihu.com/' #指定請求頭,進行UA假裝 headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36' } response=requests.get(url=url,headers=headers) print(response.text)
3 post請求實例(請求百度翻譯結果)ajax
#請求百度翻譯結果 #通過分析發現,百度翻譯發送的請求是ajax請求
import requests url='https://fanyi.baidu.com/sug' #指定請求頭,進行UA假裝 headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36' } #搜索數據不要寫死 kw=input('input a word:') #構建請求數據 data={ 'kw':kw } response=requests.post(url=url,headers=headers,data=data) print(response.json())
4 post 請求攜帶更多參數data={}json
#爬取城市肯德基餐廳的位置信息 http://www.kfc.com.cn/kfccda/storelist/index.aspx ''' 抓包獲取的數據 Request URL: http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword Request Method: POST Status Code: 200 OK Remote Address: 120.92.131.8:80 Referrer Policy: no-referrer-when-downgrade ''' import requests url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36' } data={ 'cname':'', 'pid':'', 'keyword': '深圳', 'pageIndex': 3, 'pageSize': 10, } response=requests.post(url=url,headers=headers,data=data) print(response.json())
5 爬取豆瓣電影中的詳細數據(ajax請求)瀏覽器
import requests #爬取豆瓣電影中的詳細數據(ajax請求) #'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=20&limit=20' url='https://movie.douban.com/j/chart/top_list' headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36' } #此處參數已經寫死,後續項目中在此基礎修改 params={ 'type': '24', 'interval_id': '100:90', 'action':'', 'start':'40', 'limit':'20', } response=requests.get(url=url,headers=headers,params=params) print(response.json())