Python+requests+lxml爬取豆瓣电影短评

该博客使用Python的requests和lxml库,实现了对豆瓣指定电影短评的爬取。通过download函数下载页面,getvalues函数检索数据,最后将10页短评信息存储到文件中,包含下载页面、检索数据和数据存储三个主要步骤。
# 1-数据 -- requests
"""
豆瓣指定电影短评---10页
    1-下载页面
    2-检索数据
    3-数据存储
"""
import requests
from lxml import html
def download(url):
    code = requests.get(url).text  # str
    code = html.fromstring(code)
    return code

def getvalues(code):
    # 20 个短评
    text_list = []
    div_list = code.xpath('//div[@class="comment-item"]')
    for div in div_list:
        text = div.xpath('div[@class="comment"]/p/span/text()')
        text_list.append(text[0])
    return text_list

if __name__ == "__main__":
    pages = 10  # 下载短评10页
    all_text = []  # 存储10页短评信息
    for page in range(pages):
        url = "https://movie.douban.com/subject/30334073/comments?start={}&limit=20&sort=new_score&status=P".format(page * 20)
        # 1-下载
        code = download(url)
        # 2-检索内容 - 一页短评
        text_list = getvalues(code)  # 当前页的文本
        all_text.extend(text_list)
        with open("source\\豆瓣短评.txt", "w", encoding="utf-8") as f:
            for text in all_text:
                f.write(text + "\n")
### 使用BeautifulSoup4爬取豆瓣电影短评 为了实现这一目标,需要先安装必要的Python库。如果尚未安装`requests`和`beautifulsoup4`,可以通过pip来完成: ```bash pip install requests beautifulsoup4 lxml ``` 下面是一个完整的Python脚本用于从豆瓣网站上获取特定电影页面中的短评数据[^1]。 #### 导入所需模块并设置请求头 ```python import requests from bs4 import BeautifulSoup 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' } ``` #### 获取网页内容并解析HTML结构 ```python url = "https://movie.douban.com/subject/{movie_id}/comments".format(movie_id="MOVIE_ID") # 将'MOVIE_ID'替换为目标影片ID response = requests.get(url=url, headers=headers) if response.status_code == 200: html_content = response.text else: raise Exception(f"Failed to load page with status code {response.status_code}") soup = BeautifulSoup(html_content, 'lxml') ``` #### 提取出所有评论条目及其相关信息 ```python comment_items = soup.select(".comment-item") for item in comment_items: username = item.select_one('.avatar').get('alt', '') or '' rating_tag = item.select_one('.rating') stars = int(rating_tag.get('class')[0][-2]) if rating_tag else None short_comment = item.select_one('.short').text.strip() if item.select_one('.short') else '' print({ 'username': username, 'stars': stars, 'content': short_comment }) ``` 此代码片段展示了如何通过发送HTTP GET请求访问指定URL,并利用BeautifulSoup对象`soup`查找具有`.comment-item`类名的所有元素,进而提取用户名、评分星级以及具体的短评文字。 需要注意的是,在实际操作前应当阅读并遵守目标网站的服务条款,确保网络爬虫行为合法合规;此外,频繁地向服务器发起大量请求可能会被封禁IP地址或触发其他安全机制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值