python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息
思路
1. 要獲得怎么樣的數(shù)據(jù)
2. 找到數(shù)據(jù)來(lái)源
3. 模擬瀏覽器發(fā)送請(qǐng)求獲得數(shù)據(jù)
4. 處理數(shù)據(jù),保存數(shù)據(jù)
第一步:
在這里數(shù)據(jù)是豆瓣top250中高于指定分?jǐn)?shù)的電影信息
信息有:名稱,評(píng)分,格言
第二步:
數(shù)據(jù)在網(wǎng)頁(yè)html中,這里我使用xpath語(yǔ)法分析htm代碼提取數(shù)據(jù)即可
當(dāng)然也有其它方法比如:找出頁(yè)面請(qǐng)求的數(shù)據(jù)包,抓包分析,找出數(shù)據(jù)來(lái)源
故猜測(cè)第k頁(yè)的url只需start為25*(k-1)
所以我們枚舉url,提取有效的數(shù)據(jù)。
第三步:
獲得網(wǎng)頁(yè)源碼是一般是發(fā)送get請(qǐng)求。故
制定請(qǐng)求頭
找到url
模擬瀏覽器發(fā)送數(shù)據(jù)def GetHelpfulElement(Html,socre):#根據(jù)html代碼獲得希望的element列表
Xpath=r'//div[@ class="item"]//div[@ class="star"]/span[2][text()>={}]/../../..'.format(socre)
HtmlElement=etree.HTML(Html)
return HtmlElement.xpath(Xpath)
def GetHtml(url):#根據(jù)url獲得html字符串
Headers={
"User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
resp=requests.get(url,headers=Headers)
return resp.content.decode()
最后一步就是代碼了
數(shù)據(jù)保存在date文件。
mport requests
from lxml import etree
from pprint import pprint
import re
'''
目的:爬取豆瓣top250中 評(píng)分高于指定值的電影名字,導(dǎo)演,演員信息,評(píng)分。
url="https://movie.douban.com/top250?start={}"25的增加,10次即可
針對(duì)每個(gè)html字符串用xpath語(yǔ)法進(jìn)行處理
1.找出符合條件的element元素
2.對(duì)element元素進(jìn)行信息提取成字典形式
3.把每一頁(yè)的信息整理成一個(gè)列表追加即可
'''
def GetHelpfulElement(Html,socre):#根據(jù)html代碼獲得希望的element列表
Xpath=r'//div[@ class="item"]//div[@ class="star"]/span[2][text()>={}]/../../..'.format(socre)
HtmlElement=etree.HTML(Html)
return HtmlElement.xpath(Xpath)
def GetHtml(url):#根據(jù)url獲得html字符串
Headers={
"User - Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}
resp=requests.get(url,headers=Headers)
return resp.content.decode()
def HandleList(Mylist):#處理xpath的獲得的列表 返回第一個(gè),否則返回None
return Mylist[0] if len(Mylist)!=0 else None
def ElementToDict(Element):#一個(gè)elemengt信息轉(zhuǎn)化為dict
ret={}
html=etree.tostring(Element,encoding="utf-8").decode()
Element=etree.HTML(html)#不知道為什么只有這樣,每次函數(shù)得到的信息才不同
RatingXpath=r'//span[@class="rating_num"]/text()'
TitleXpath=r'//a/span[@class="title"]/text()'
QuoteXpath=r'//span[@class="inq"]/text()'
ret['rating:num']=HandleList(Element.xpath(RatingXpath))
ret['title'] = HandleList(Element.xpath(TitleXpath))
ret['quote'] = HandleList(Element.xpath(QuoteXpath))
return ret
def ElementlistToDictlist(Elementlist):#element列表轉(zhuǎn)化為有用的dict列表
Mylist=[]
for i in Elementlist:
Mylist.append(ElementToDict(i))
return Mylist
def Save(Mydict):#保存一條信息
Keylist = ['title', 'rating:num', 'quote']
NameList = ['名稱', '評(píng)分', '格言']
with open('date.txt','a',encoding='utf-8') as fp:
for i in range(len(Keylist)):
fp.write(NameList[i])
fp.write(' : ')
fp.write(Mydict[Keylist[i]] if Mydict[Keylist[i]]!=None else " ")
fp.write('\n')
fp.write('\n')
def run(score):#實(shí)現(xiàn)主要邏輯
TempUrl = r"https://movie.douban.com/top250?start={}"
Dictlist =[]
for numbers in range(10):
Url = TempUrl.format(numbers * 25)
ElementList = GetHelpfulElement(GetHtml(Url), score)
TempDictList= ElementlistToDictlist(ElementList)
global total
total+=len(TempDictList)
for i in TempDictList:
Save(i)
if __name__ == '__main__':
RatingNum=float(input("請(qǐng)輸入最低評(píng)分:"))
total=0
print("請(qǐng)稍等...")
run(RatingNum)
print("共有:",total,"個(gè)結(jié)果。")
總結(jié)
以上是生活随笔為你收集整理的python豆瓣历史评分_Python实战-爬取豆瓣top250评分高于指定值的电影信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 无聊直播大盘点无聊的直播
- 下一篇: python2.7教程 pdf_PYTH