爬蟲實例系列一(requests)

一 爬蟲簡介

'''
爬蟲:經過編寫程序,模擬瀏覽器上網,讓其去互聯網上爬取數據的過程

分類:
通用爬蟲:爬取所有的頁面數據
聚焦爬蟲:抓取頁面中局部數據
增量式爬蟲:爬取網站中更新出的數據

反爬機制:門戶網站會經過制定相關的技術手段,組織爬蟲程序進行數據獲取
反反爬策略:針對反爬機制制定的策略,爲了獲取數據

第一個反爬機制:
robots.txt協議:防君子不防小人的協議
'''

 

二  request 入門使用流程

 

'''

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())
相關文章
相關標籤/搜索