2021-10-20

首先要找到要爬虫的网页,这里是豆瓣电影top250。然后通过 F12 查看网页源代码,检查元素,定位要爬取的信息,这里可以右击复制xpath,用于爬虫定位。用Python写网络爬虫观察一下网页,可以发现一共有10页,每页有25部电影,每页的域名有相似之处。所以,可以写一个循环,下载每一页的网站,得到该网站所有的电影链接,然后内部再写一个循环,下载每页的电影链接,爬取需要的内容信息。
import requests
from bs4 import BeautifulSoup
import pandas as pd
page_indexs = range(0, 250, 25)
list(page_indexs)
def download_all_htmls():
#下载所有列表页面的HTML,用于后续的分析
htmls = []
for idx in page_indexs:
url = f"https://movie.douban.com/top250?start={idx}&filter="
print(“craw html:”, url)
r = requests.get(url,
headers={“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)”})
if r.status_code != 200:
raise Exception(“error”)
htmls.append(r.text)
return htmls
#执行爬取
htmls = download_all_htmls()
htmls[0]
def parse_single_html(html):
#解析单个HTML,得到数据
soup = BeautifulSoup(html, ‘html.parser’)
article_items = (
soup.find(“div”, class_=“article”)
.find(“ol”, class_=“grid_view”)
.find_all(“div”, class_=“item”)
)
datas = []
for article_item in article_items:
rank = article_item.find(“div”, class_=“pic”).find(“em”).get_text()
info = article_item.find(“div”, class_=“info”)
title = info.find(“div”, class_=“hd”).find(“span”, class_=“title”).get_text()
stars = (
info.find(“div”, class_=“bd”)
.find(“div”, class_=“star”)
.find_all(“span”)
)
rating_star = stars[0][“class”][0]
rating_num = stars[1].get_text()
comments = stars[3].get_text()
datas.append({
“rank”:rank,
“title”:title, rating_star":rating_star.replace(“rating”,"").replace("-t",""),
“rating_num”:rating_num,
“comments”:comments.replace(“人评价”, “”)
})
return datas
import pprint
pprint.pprint(parse_single_html(htmls[0]))
#执行所有的HTML页面的解析
all_datas = []
for html in htmls:
all_datas.extend(parse_single_html(html))
all_datas
df = pd.DataFrame(all_datas)
df
df.to_excel(“豆瓣电影TOP250.xlsx”)
最后输出xlsx文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值