用python爬取豆瓣電影TOP250獲取電影排名、電影名稱、電影別名、電影連結、導演、主演、年份、地點、型別、評分、評價人數、摘要、海報下載地址。
python小白,第一次爬蟲,如有不對的地方還請多多指出。
用BeautifulSoup獲取電影排名、電影名稱、電影別名、電影連結、導演、主演、年份、地點、型別、評分、評價人數、摘要、海報下載地址。
cur_url:每一頁的地址,例如:https://movie.douban.com/top250?start=0&filter=
html = requests.get(cur_url)
soup = BeautifulSoup(html.text, "html.parser")
每一個電影都在<li></li>中,就用for迴圈獲取每一個電影的資訊。
film_list = soup.find_all("div", class_="item")
for list in film_list:
1.獲取電影排名
film_ranking = list.find("div", class_="pic").find('em').text
2.電影名稱
film_chinese_name = list.find("span", class_="title").text
3.電影別名
將別名左邊的空格和“/”去掉
film_other_name = list.find("span", class_="other").text.strip().lstrip("/").strip()
4.電影連結
film_url = list.find("a").get("href")
5.導演、主演、年份、地點、型別
# 導演/主演/年份/地點/型別 split():拆分 strip():方法用於移除字串頭尾指定的字元(預設為空格) film_information = list.find("div", class_="bd").find("p").text.strip()# 以"\n"形式將字串拆分 film_information_split = film_information.split("\n") # print(film_information_split) film_information_split_1 = film_information_split[0] # 導演和演員的資訊 film_information_split_2 = film_information_split[1] # 年份、地點、型別的資訊 # print(film_information_split_1) # print(film_information_split_2) # film_information_split_1以"\xa0\xa0\xa0"形式拆分 film_information_1 = film_information_split_1.split("\xa0\xa0\xa0") # 將導演和演員的資訊用"\xa0\xa0\xa0"拆分 # 導演 film_director_1 = film_information_1[0].strip() film_director = film_director_1.split(":")[1] # print(film_director) # 主演 film_actor_1 = film_information_1[1].strip() if ":" in film_actor_1: film_actor = film_actor_1.split(":")[1] else: film_actor = "" # print(film_actor) # film_information_split_2以"\"形式拆分 film_information_2 = film_information_split_2.split("/") # 將年份、地點、型別的資訊用"/"進行拆分 # 年份 film_year = film_information_2[0].strip() # print(film_year) # 地區 film_area = film_information_2[1].strip() # print(film_area) # 型別 film_genre = film_information_2[2].strip() # print(film_genre)
6.評分
rating = list.find("span", class_="rating_num").text
7.評價人數
find_next_sibling():返回符合條件的後面的第一個tag節點
film_rating_num = list.find("span", class_="rating_num").find_next_sibling().find_next_sibling().text
對評價欄位進行拆分,只留下數字
film_comment_num = re.findall('\d{0,}', film_rating_num)[0]
8.摘要
film_quote = list.find("span", class_="inq").text
9.海報下載地址
film_post = list.find("img").get("src")
在列表中新增字典需要使用copy方法。
列表名.append(字典名.copy())