使用Python的requests库和xpath爬取豆瓣top250每部电影的详细信息

最近在做毕设,需要很多电影数据,手动输入很麻烦,所以想到了用python爬取,但本人很少接触python而且网上关于top250爬取的基本都是top250界面的信息,很少有爬取每一部详细信息的,于是自己花了点时间搞了一个,下面直接贴代码和结果,大家需要的话就用(第一次用python大家写的不好大家见谅)。

#引库,爆红点击安装即可
import requests
import uuid
from lxml import etree
import csv
#总体思想就是先取得每页25部电影的链接,再对每部电影链接进行访问并取得信息

#请求头设置一般都是这个
headers={
   
   
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
#列表用于存储下面字典中的数据
VedioList=[]
#top250每一页网址的地址都是有规律的例如第一页start=0,第二页start=25以此类推,所以下面通过循环改变网址,range(0,26,25)即循环两次
for i in range(0,26,25):
    #i=0时对应top250的第一页网址
    url='https://movie.douban.com/top250?start='+str(i)+'&filter='
    #请求(固定写法)
    resp=requests.get(url=url,headers=headers)
    data=etree.HTML(resp.text)
    #xpath定位到本页每一部电影的链接位置并取出存放到src1中(可自行输出查看)
    src1=data.xpath('//div[@class="item"]/div[@class="pic"]/a/@href')
    #接着循环25次分别访问本页面每个电影的链接
    for k in range(0,25):
        print(k)
        #访问第k部电影链接
       
### 豆瓣电影Top250爬取方法 为了实现爬取豆瓣电影Top250页面中的电影名称与评分数据,可以使用Python的`requests``lxml`中的XPath技术。以下是具体的实现方式: #### 1. 请求网页内容 首先需要使用`requests`向目标网页发送HTTP请求,获取HTML源代码。豆瓣电影Top250页面的URL格式为`https://movie.douban.com/top250?start=0`,其中参数`start`表示从第几部电影开始,每页显示25部电影[^1]。 ```python import requests from lxml import etree headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } def fetch_page(url): response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: print(f"Failed to fetch page: {response.status_code}") return None ``` #### 2. 解析HTML并提取数据 通过`lxml`的`etree.HTML()`方法将HTML字符串解析为DOM树,并使用XPath表达式提取所需的电影名称评分信息[^3]。 ```python def parse_html(html): selector = etree.HTML(html) movie_items = selector.xpath('//div[@class="item"]') # 获取所有电影条目 movies = [] for item in movie_items: title = item.xpath('.//span[@class="title"]/text()')[0] # 提取电影名称 rating = item.xpath('.//span[@class="rating_num"]/text()')[0] # 提取评分 movies.append({'title': title, 'rating': rating}) return movies ``` #### 3. 遍历多页数据 豆瓣电影Top250250电影,分为10页展示(每页25部)。可以通过循环修改`start`参数来抓取所有页面的数据。 ```python def scrape_douban_top250(): base_url = 'https://movie.douban.com/top250?start={}' all_movies = [] for i in range(0, 250, 25): # start参数从0到225,步长为25 url = base_url.format(i) html = fetch_page(url) if html: movies = parse_html(html) all_movies.extend(movies) return all_movies ``` #### 4. 完整代码示例 以下是完整的代码实现,包含请求、解析存储功能: ```python import requests from lxml import etree headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } def fetch_page(url): response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: print(f"Failed to fetch page: {response.status_code}") return None def parse_html(html): selector = etree.HTML(html) movie_items = selector.xpath('//div[@class="item"]') movies = [] for item in movie_items: title = item.xpath('.//span[@class="title"]/text()')[0] rating = item.xpath('.//span[@class="rating_num"]/text()')[0] movies.append({'title': title, 'rating': rating}) return movies def scrape_douban_top250(): base_url = 'https://movie.douban.com/top250?start={}' all_movies = [] for i in range(0, 250, 25): url = base_url.format(i) html = fetch_page(url) if html: movies = parse_html(html) all_movies.extend(movies) return all_movies if __name__ == "__main__": movies_data = scrape_douban_top250() for movie in movies_data: print(f"Title: {movie['title']}, Rating: {movie['rating']}") ``` #### 注意事项 - 在实际运行时,可能需要根据实际情况调整`User-Agent`头以避免被反爬虫机制阻止[^2]。 - 爬取过程中应遵守网站的`robots.txt`协议,合理设置请求间隔时间以减少对服务器的压力。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值