python爬蟲爬取豆瓣電影

最近買了《python編程從入門到實(shí)踐》,想之后寫兩篇文章,一篇數(shù)據(jù)可視化,一篇python web,今天這篇就當(dāng)python入門吧。

一.前期準(zhǔn)備:

IDE準(zhǔn)備:pycharm
導(dǎo)入的python庫:requests用于請求,BeautifulSoup用于網(wǎng)頁解析

二.實(shí)現(xiàn)步驟

1.傳入url

2.解析返回的數(shù)據(jù)

3.篩選

4.遍歷提取數(shù)據(jù)

三.代碼實(shí)現(xiàn)

import requests # 導(dǎo)入網(wǎng)頁請求庫
from bs4 import BeautifulSoup # 導(dǎo)入網(wǎng)頁解析庫

# 傳入U(xiǎn)RL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的數(shù)據(jù)
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class屬性為item的div
movie_list=soup.find_all("div",class_="item")

#遍歷提取數(shù)據(jù)
for movie in movie_list:
    title=movie.find("span",class_="title").text
    rating_num=movie.find("span",class_="rating_num").text
    inq=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    comment_num = star.find_all('span')[-1].text
    print(title, rating_num, '\n', comment_num, inq, '\n')

以title變量為例,我們找到了div中,class屬性為item的div,然后在此div中,篩選出class名為title的span,獲取文本內(nèi)容,打?。╟omment_num比較特殊,因?yàn)槠湓趕tar的div下,沒有class屬性,為div中最后一個(gè)span,所以我們?nèi)〕鰏tar層級中最后一個(gè)span,變?yōu)槲谋荆?,以下是輸出結(jié)果。


豆瓣.JPG

四.對獲取到的數(shù)據(jù)進(jìn)行整合

1.整合成列表

2.整合成json文件

3.定義為函數(shù)形式

1.整合成列表

import requests # 導(dǎo)入網(wǎng)頁請求庫
from bs4 import BeautifulSoup # 導(dǎo)入網(wǎng)頁解析庫
import pprint # 規(guī)范顯示列表的插件庫

# 傳入U(xiǎn)RL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的數(shù)據(jù)
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class屬性為item的div
movie_list=soup.find_all("div",class_="item")

#創(chuàng)建存儲結(jié)果的空列表
result_list=[]

#遍歷提取數(shù)據(jù)
for movie in movie_list:
    #創(chuàng)建字典
    dict={}
    dict["title"]=movie.find("span",class_="title").text
    dict["dictrating_num"]=movie.find("span",class_="rating_num").text
    dict["inq"]=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    dict["comment_num"] = star.find_all('span')[-1].text
    result_list.append(dict)

    # 顯示結(jié)果
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(result_list)

控制臺顯示的結(jié)果:


列表.JPG

2.整合成JSON文件

import requests # 導(dǎo)入網(wǎng)頁請求庫
import json# 用于將列表字典(json格式)轉(zhuǎn)化為相同形式字符串,以便存入文件
from bs4 import BeautifulSoup # 導(dǎo)入網(wǎng)頁解析庫


# 傳入U(xiǎn)RL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的數(shù)據(jù)
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class屬性為item的div
movie_list=soup.find_all("div",class_="item")

#創(chuàng)建存儲結(jié)果的空列表
result_list=[]

#遍歷提取數(shù)據(jù)
for movie in movie_list:
    #創(chuàng)建字典
    dict={}
    dict["title"]=movie.find("span",class_="title").text
    dict["dictrating_num"]=movie.find("span",class_="rating_num").text
    dict["inq"]=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    dict["comment_num"] = star.find_all('span')[-1].text
    result_list.append(dict)

    # 顯示結(jié)果
# 將result_list這個(gè)json格式的python對象轉(zhuǎn)化為字符串
s = json.dumps(result_list, indent = 4, ensure_ascii=False)
# 將字符串寫入文件
with open('movies.json', 'w', encoding = 'utf-8') as f:
    f.write(s)

結(jié)果:


json.JPG

3.定義成函數(shù)

import requests # 導(dǎo)入網(wǎng)頁請求庫
import json# 用于將列表字典(json格式)轉(zhuǎn)化為相同形式字符串,以便存入文件
from bs4 import BeautifulSoup # 導(dǎo)入網(wǎng)頁解析庫

# 用于發(fā)送請求,獲得網(wǎng)頁源代碼以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content

# 解析返回的數(shù)據(jù)
def parse(text):
    soup=BeautifulSoup(text,"html.parser")
    movie_list=soup.find_all("div",class_="item")
    result_list=[]
    for movie in movie_list:
    #創(chuàng)建字典
        dict={}
        dict["title"]=movie.find("span",class_="title").text
        dict["dictrating_num"]=movie.find("span",class_="rating_num").text
        dict["inq"]=movie.find("span",class_="inq").text
        star = movie.find('div', class_='star')
        dict["comment_num"] = star.find_all('span')[-1].text
        result_list.append(dict)
    return result_list

    #將數(shù)據(jù)寫入json文件
def write_json(result):
    s = json.dumps(result, indent = 4, ensure_ascii=False)
    with open('movies1.json', 'w', encoding = 'utf-8') as f:
        f.write(s)

# 主運(yùn)行函數(shù),調(diào)用其他函數(shù)
def main():
    url = 'https://movie.douban.com/top250'
    text = start_requests(url)
    result = parse(text)
    write_json(result)

if __name__ == '__main__':
    main()

結(jié)果:


函數(shù).JPG

覺得有用的話就給顆小????吧~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容