爬取豆瓣电影的数据-----爬虫实战案例(爬取文字)

爬取豆瓣电影的数据

首先打开"豆瓣电影TOP250"网页:

  • 右击鼠标,找到检查点击,然后再点击网络
  • 向上拉动,找到名称栏中的第一个,点击打开
  • 可以在标头里看到请求URL和请求方式,复制URL(需要用到)
  • 在标头的最下面有"User-Agent",也复制下来(也可以下载pip install fake-userangent库,用别人写好的UA)


确定我们要爬取的内容

我们爬取每个电影的一些信息

获取多页的信息

因为豆瓣电影这个页面每一个页面只能展示25个电影,当点击下一页时我们会发现每一页的网址只有25->50->75这样的变化,其他的没有变化,所以变化可以通过for循环来遍历它,从而达到**获取到多页的电影信息 **


具体代码如下:

python 复制代码
for i in range(0, 250, 25):
        url = f"https://movie.douban.com/top250?start={i}&filter="

完整代码:

python 复制代码
# 豆瓣电影
import requests   # 别人写好的ua  pip install fake_useragent
import fake_useragent
from lxml import etree
import re

if __name__ == '__main__':
    # UA伪装
    head = {
        # "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        # 用 import fake_useragent 库里的UA
        "User-Agent": fake_useragent.UserAgent().random
    }
    
    # 打开一个文件将获取的数据写进去
    fp = open("./doubanFilm.txt", "w", encoding="utf-8")

    # 1、url
    # url = "https://movie.douban.com/top250"
    # url2 = "https://movie.douban.com/top250?start=25&filter="
    # url3 = "https://movie.douban.com/top250?start=50&filter="
    for i in range(0, 250, 25):
        url = f"https://movie.douban.com/top250?start={i}&filter="

        # 发送请求
        response = requests.get(url, headers=head)
        # 获取想要的数据
        res_text = response.text
        # print(res_text)
        # 数据解析
        tree = etree.HTML(res_text)
        # 定位所有的li标签
        li_list = tree.xpath("//ol[@class='grid_view']/li")
        for li in li_list:
            # 获取电影名字
            film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))
            # 获取导演、主演、年份、国家、电影类型
            director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
            # 获取评分
            score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
            # 获取标签语
            quote = "".join(li.xpath(".//span[@class='inq']/text()"))
            # 将获取到的导演、主演、年份、国家、电影类型放到一个新列表里,并去除空格
            new_str = director_actor_y_country_type.strip()
            # 将导演从新列表中取出  用正则表达式去匹配
            director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa51]+)(.*?)", new_str).group(1)
            # 取年份
            y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)
            # 取国家
            country = new_str.rsplit("/")[-2].strip()
            # 取电影类型
            types = new_str.rsplit("/")[-1].strip()
            # 因为有些电影没有主演所以将主演用try-except方法做判断,有主演的取出来,没有主演设定为"no"
            try:
                actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
            except Exception as e:
                actor = "no"
            
            # 因为每个数据都用.join的方法转换成了字符串,所以便可以将这些数据相加并用#隔开,便能连在一起,并换行,使得数据更加工整
            fp.write(film_name + "#" + director + "#" + actor + "#" + y + "#"
                + country + "#" + types + "#" + score + "#" + quote + "\n")
            print(film_name, director, actor, y, country, types, score, quote)
    fp.close()

结果

相关推荐
、如果1 小时前
推文评论数据怎么拿?X(Twitter)评论分析 Skill 的工程拆解与实测
爬虫·ai编程·twitter
深蓝电商API19 小时前
常见反爬策略全解析
爬虫·反爬策略
honestman_1 天前
Twitter/X 舆情监控与竞品分析实战指南
爬虫·twitter
CDN3601 天前
IP 黑白名单防护实操:出海网站拦截恶意爬虫、扫描 IP,CDN 流量管控落地指南
网络·爬虫·tcp/ip
跨境旺仔小拳头2 天前
如何使用Crawl4AI进行网页爬虫?从0搭建教程与代理配置指南
网络·人工智能·爬虫·chatgpt·aigc
傻啦嘿哟2 天前
某东商品爬虫实战:爬取商品价格+评论+销量,做竞品分析工具
爬虫
楷哥爱开发2 天前
IPFoxy爬虫代理配置指南:从0搭建Crawl4AI网页爬虫教程
大数据·运维·人工智能·爬虫
名字还没想好☜2 天前
Python asyncio.Queue 实战:用生产者-消费者给爬虫/任务流限速又解耦
开发语言·爬虫·python·并发·asyncio
2601_966949652 天前
Python 量化数据质量校验:如何确保股票历史日线数据不存在缺失交易日?
开发语言·人工智能·爬虫·python·量化策略·量化·quantdash
benchmark_cc2 天前
Claude Code + MCP + QuantDash:打造全自动量化研究流水线的终极指南
人工智能·后端·爬虫·算法·claude·mcp·quantdash