最近買了《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
覺得有用的話就給顆小????吧~