??個人主頁:為夢而生~ 關(guān)注我一起學(xué)習(xí)吧!
??專欄:python網(wǎng)絡(luò)爬蟲從基礎(chǔ)到實戰(zhàn) 歡迎訂閱!后面的內(nèi)容會越來越有意思~
??往期推薦:
??首先,我們前面講了多篇基礎(chǔ)內(nèi)容:
【Python爬蟲開發(fā)基礎(chǔ)④】爬蟲原理
【Python爬蟲開發(fā)基礎(chǔ)⑤】HTML概述與基本標(biāo)簽詳解
【Python爬蟲開發(fā)基礎(chǔ)⑥】計算機(jī)網(wǎng)絡(luò)基礎(chǔ)(Web和HTTP)
【Python爬蟲開發(fā)基礎(chǔ)⑦】urllib庫的基本使用
【Python爬蟲開發(fā)基礎(chǔ)⑧】XPath庫及其基本用法
【Python爬蟲開發(fā)基礎(chǔ)⑨】jsonpath和BeautifulSoup庫概述及其對比
??在本文章之前,上一篇實戰(zhàn)的文章:
【Python爬蟲開發(fā)實戰(zhàn)①】使用urllib以及XPath爬取可愛小貓圖片
大家可以復(fù)制代碼感受一下爬蟲的魅力~
??本期內(nèi)容:我們來接著上次的解析庫jsonpath,以及前面的urllib,進(jìn)行一個比較有趣的實戰(zhàn):獲取即將上映的電影信息
跟上期一樣,我們先來看一下效果:
1 需要使用的庫
- urllib
urllib是Python的一個標(biāo)準(zhǔn)庫,用于處理URL(統(tǒng)一資源定位符)的模塊。它提供了一些常用的功能,包括發(fā)送請求、處理響應(yīng)、解析URL等。
- 可以點擊之前文章鏈接學(xué)習(xí)基礎(chǔ)知識【Python爬蟲開發(fā)基礎(chǔ)⑦】urllib庫的基本使用
- json
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式。它以易于閱讀和編寫的文本格式來表示結(jié)構(gòu)化數(shù)據(jù)。JSON數(shù)據(jù)格式廣泛用于互聯(lián)網(wǎng)應(yīng)用之間的數(shù)據(jù)傳輸,并且被各種編程語言支持。
- 使用python對json格式數(shù)據(jù)進(jìn)行操作,可參考【Python爬蟲開發(fā)基礎(chǔ)③】Python基礎(chǔ)(文件操作方法匯總)這篇文章
- jsonpath
JSONPath是一種用于從JSON數(shù)據(jù)中提取或查詢數(shù)據(jù)的表達(dá)式語言。它最初由史蒂芬·摩根(Stephen Morgan)在2007年創(chuàng)建,并在2014年成為了IETF(互聯(lián)網(wǎng)工程任務(wù)組)的標(biāo)準(zhǔn)。
- 大家可以通過上一篇文章了解一下jsonpath解析 【Python爬蟲開發(fā)基礎(chǔ)⑨】jsonpath和BeautifulSoup庫概述及其對比
- csv
Python的csv是一個用于讀取、寫入和操作CSV(逗號分隔值)文件的模塊。CSV文件是一種常見的用于存儲和交換數(shù)據(jù)的文件格式,它將數(shù)據(jù)按照逗號進(jìn)行分隔,并可使用文本編輯器進(jìn)行查看和編輯。
在Python中,使用csv模塊可以輕松地讀取和寫入CSV文件。它提供了一些用于處理CSV數(shù)據(jù)的函數(shù)和類,包括Reader、Writer和DictReader等。
- 大家同樣可以通過這篇文章了解一下csv【Python爬蟲開發(fā)基礎(chǔ)③】Python基礎(chǔ)(文件操作方法匯總)
2 尋找接口并創(chuàng)建請求
首先打開首頁,我們究竟從哪里能得到想要的數(shù)據(jù)呢?有兩種方法,一、通過定位得到HTML代碼,通過解析代碼得到想要的內(nèi)容;二、通過抓包,得到主要的接口,通過對這個接口發(fā)送請求,就可以得到數(shù)據(jù)。
在這里,我們通過第二種方法,也就是抓包獲取。
-
首先打開相應(yīng)的網(wǎng)頁,按F12打開開發(fā)者工具點擊網(wǎng)絡(luò),并清除所有內(nèi)容。
-
刷新頁面,抓取到響應(yīng)的數(shù)據(jù),找到j(luò)son格式數(shù)據(jù),該接口就是我們需要的
3 發(fā)送請求并獲取響應(yīng)
下面我們開始寫代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-533246.html
- 導(dǎo)入需要的庫
import urllib.request
import json
import jsonpath
import csv
- 請求對象的定制
# 請求對象的定制
def create_request():
url = '(自己復(fù)制過來)'
headers = {
'Cookie':'(自己復(fù)制過來)',
'Referer':'(自己復(fù)制過來)',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
request = urllib.request.Request(url = url, headers = headers)
return request
- 獲取網(wǎng)頁源碼
# 獲取網(wǎng)頁的源碼
def get_content(request):
# 發(fā)送請求獲取響應(yīng)
response = urllib.request.urlopen(request)
# 對響應(yīng)進(jìn)行解碼
content = response.read().decode('utf-8')
# print(content)
# 返回
return content
在這里得到的content就是獲取到的響應(yīng)數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-533246.html
4 使用jsonpath解析得到的json數(shù)據(jù)
def analyze(content):
content = content.split('(')[1].split(')')[0]
with open('tpp.json', 'w', encoding='utf-8') as fp:
fp.write(content)
obj = json.load(open('tpp.json', 'r', encoding='utf-8'))
return obj
- 最后將獲得的數(shù)據(jù)寫入到csv文件中
def down_load(obj):
showName_list = jsonpath.jsonpath(obj, '$..showName')
director_list = jsonpath.jsonpath(obj, '$..director') # 95
leadingRole_list = jsonpath.jsonpath(obj, '$..leadingRole') # 90
type_list = jsonpath.jsonpath(obj, '$..type')
country_list = jsonpath.jsonpath(obj, '$..country')
language_list = jsonpath.jsonpath(obj, '$..language')
# duration_list = jsonpath.jsonpath(obj, '$..duration') # 57
openDay_list = jsonpath.jsonpath(obj, '$..openDay')
with open('./即將上映電影信息.csv', 'a', encoding='gbk', newline='') as f:
a = csv.writer(f)
field = ['電影名', '導(dǎo)演', '主演', '類型', '國家', '語言', '上映時間']
a.writerow(field)
print(['電影名', '導(dǎo)演', '主演', '類型', '國家', '語言', '上映時間'])
for i in range(len(leadingRole_list)):
list_data = [showName_list[i], director_list[i], leadingRole_list[i], type_list[i], country_list[i], language_list[i], openDay_list[i]]
a.writerow(list_data)
print(list_data)
- 最后,我們按順序調(diào)用以上函數(shù)就可以實現(xiàn)了
# (1) 請求對象的定制
request = create_request()
# (2) 獲取網(wǎng)頁的源碼
content = get_content(request)
# (3) 解析
obj = analyze(content)
# (4) 下載
down_load(obj)
到了這里,關(guān)于【Python爬蟲開發(fā)實戰(zhàn)②】使用urllib以及jsonpath爬取即將上映電影信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!