爬蟲示例--requests-module

reuqests_testjavascript

 

 

In [2]:
import requests 
In [ ]:
# 爬取 一張圖片, 並作持久化保存
import requests
url = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2381789298,2193118133&fm=26&gp=0.jpg'
# 對於反爬機制--UA檢測(對請求載體的檢測), 應對的反反爬策略爲: 添加請求頭信息 User-Agent.
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
f = open('one.jpg','wb')
img_data = requests.get(url=url,headers=header).content
f.write(img_data)
In [ ]:
# 正則匹配 URL 中 指定的字符串,例: ID 或 一張圖片的文件名
import re
import requests 
url = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2381789298,2193118133&fm=26&gp=0.jpg'
shi = re.search('.*y/it/u=(.*?),.*',url)
print(shi.groups())
In [3]:
# 爬取 搜狗網首頁 源碼並作持久化保存
import requests 
url = 'https://www.sogou.com/'
res = requests.get(url=url)
pg_text = res.text
with open('sogou.html','w') as f:
    f.write(pg_text)
print('over')
In [ ]:

爬取搜狗


#需求:爬取搜狗指定詞條搜索後的頁面數據,作持久化保存
import requests
url = 'https://www.sogou.com/web'
# 用戶輸入指定條目
wd = input('enter a word:')
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
#封裝參數
param = {
    'query':wd
}
response = requests.get(url=url,params=param,headers=header)

page_text = response.content
fileName = wd+'.html'
with open(fileName,'wb') as fp:
    fp.write(page_text)
print('over')
In [8]:

爬取 百度翻譯

# 爬取 百度翻譯中  指定詞條 後返回的數據
# https://fanyi.baidu.com/translate
# 分析得知, 翻譯結果數據 爲 動態加載,是 Ajax 請求,返回的爲 JSON 字典數據
import requests 
url = "https://fanyi.baidu.com/sug"
main = input("sou:")
data = {
    "kw": main
}
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
res = requests.post(url=url,data=data,headers=header)
# 確保此請求 返回的數據爲 JSON 數據,纔可以使用 .json() 方法 接受,不然報錯
pg_text = res.json()  
print(pg_text)
 
sou:dog
{'errno': 0, 'data': [{'k': 'dog', 'v': 'n. 狗; 犬; 公狗; 公狐; 公狼; 賽狗; 靈�賽; v. (長期)困擾,折磨,糾纏; 跟蹤;'}, {'k': 'dogs', 'v': 'n. 狗; 犬; 公狗; 公狐; 公狼; 賽狗; 靈�賽; v. (長期)困擾,折磨,糾纏; 跟蹤;'}, {'k': 'doge', 'v': 'n. (美西部)孤犢,無母犢牛;'}, {'k': 'doggy', 'v': 'n. (兒語)小狗,汪汪,狗狗; adj. 狗的; 像狗同樣的;'}, {'k': 'doggie', 'v': 'n. (兒語)狗狗;'}]}
In [7]:

爬取 豆瓣電影 (按照熱度)

#  爬取 豆瓣電影 (按照熱度)
# https://movie.douban.com/explore
# 分析得知: 頁面電影信息爲動態加載,
# 當滾輪觸底或點擊加載 更多時,發起 Ajax 請求,返回 JSON 字典電影數據
import requests 
url = 'https://movie.douban.com/j/search_subjects'
limit = int(input('數量:'))
start = int(input('開始位置:'))
# 構造 請求 URL 參數
data = {
    "type":"movie",
    "tag": "熱門",
    "sort": "recommend",
    "page_limit": limit,
    "page_start": start,
}
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
res = requests.get(url=url,params=data,headers=header)
# 接受 JSON 字典數據
pg_text = res.json()
# 作持久化保存
f = open('豆瓣Movie','w')
for s in pg_text['subjects']:
    entry = s['title'] + "\t" + s['rate'] + '\t' + s['url']
    print(entry)
    f.write(entry + '\r\n')
f.close()
print('over')
 
數量:2
開始位置:2
只有愛能讓我生存	7.5	https://movie.douban.com/subject/30139756/
大人物	6.3	https://movie.douban.com/subject/30158840/
In [17]:

爬取國家藥品監督管理總局企業信息

#需求:爬取國家藥品監督管理總局中基於中華人民共和國化妝品生產許可證  每家公司的  相關數據
# http://125.35.6.84:81/xk/
# 第一步:************************ 分析:*****判斷頁面數據是否爲動態加載
# 得知:
# 首頁數據 爲 動態加載,直接爬取首頁 獲取不到想要信息
# 得知 分頁 url 爲 Ajax 請求,只是 不一樣的頁碼 所帶的參數不同,返回的爲 json 字典,
# 且 每一家企業的 詳情頁 的數據 也爲 動態加載 ,爲 Ajax 請求,返回的 爲 json 字典
# 經過 分頁 URL 返回到的 json數據,獲得 每一家企業的 ID, 
# 得知 詳情頁的 URL 都同樣,只是 不一樣的企業 所帶的參數 ID 不同。
# 再經過 分頁 URL得到 ID 構造 詳情頁的 URL 
# 首頁 分頁的 URL 地址,
import requests 
pg_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
busi_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
start = int(input('起始頁:'))
num = int(input("頁數:"))
step = int(input('每頁的數量:'))/2
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}

busi_list = []
f = open('company.html','w',encoding='utf-8')
for pag in range(start,start+num):     # 循環 爬取 每一頁的 URL地址,
    pg_data = {
        "on": "true",
        "page": pag,
        "pageSize": step,
        "productName": "",
        "conditionType": "1",
        "applyname": "",
        "applysn": "",
    }
# 爬取 分頁 URL, 得到 JSON 數據
    pg_list = requests.post(url=pg_url,data=pg_data,headers=header).json()
    for p in pg_list['list']:
        busi_data = {
            "id": p["ID"],
        }
# 爬取 詳情頁 URL, 得到 JSON 數據
        busi = requests.post(url=busi_url,data=busi_data,headers=header).json()
       
        busi_list.append(str(busi) + "\r\n")
# 將全部 企業的 信息 列表 數據 作持久化保存
f.writelines(busi_list)
f.close()
print('over')
 
起始頁:2
頁數:3
每頁的數量:30
In [ ]:

百度搜索 --嗅圖--: 爬取 照片

## 百度搜索 --嗅圖--: 爬取 照片
# 分析:
# 得知 頁面數據 爲動態加載,
# 當滾輪 觸底 時 自動 觸發 Ajax 請求,返回 JSON 數據。
import requests
import re
import os
pg_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=嗅圖&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&word=嗅圖&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&expermode=&force=&pn=150&rn=100&gsm=96&1558065706969="
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
}
res = requests.get(url=pg_url,headers=header).json()
url_list = []
for s in res['data'][:60]:
    img_url = s['hoverURL']
    if img_url:
        url_list.append(img_url)
#         print(img_url)
if not os.path.exists('./xiutu'):
    os.mkdir('./xiutu')
for m in url_list:
    print('url=',m)
    file_name ='xiutu/'+ re.search(".*/it/u=(.*?),.*",m).groups()[0] + '.jpg'
    f = open(file_name,'wb')
    img_data = requests.get(url=m,headers=header).content
    f.write(img_data)
    f.close()
print('over')
相關文章
相關標籤/搜索