004爬虫之获取豆瓣TOP250电影数据

今天我们继续通过正则表达式解析页面源代码,获取的网页为豆瓣TOP250,具体网址为:https://movie.douban.com/top250

今天的主要思路:

1、获取网页源代码;
2、通过正则表达式解析网页的信息;
3、将获取的内容存到本地文件中。

网页的信息截图:

经过爬取后的数据结果截图:

下面是详细的代码,里面有相关的注释,里面有几个关键的知识点大家可以细细的揣摩一下,比如:for循环,open()、f.write()、re.compile()、re.finditer()、re.S。下面是详细的代码,有什么不懂的可以直接在下面留言。最后建议大家自己敲的时候不要一次性全部敲完,按照上面三步一步一步编写:

# 豆瓣TOP250数据抓取
# 1、抓取豆瓣TOP250电影信息,拿到页面源代码
# 2、通过re解析提取数据
# 3、存储解析的数据
import requests
import re

f = open("TOP250.cvs", mode="w", encoding="utf-8")

for num in range(0, 250, 25): # 循环获取访问地址
    url = f"https://movie.douban.com/top250?start={num}&filter="
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
    }

    resp = requests.get(url, headers=headers)
    resp.encoding = "utf-8"
    pageSource = resp.text

    # 编写正则表达式
    # re.S可以让正则中的.匹配换行符
    obj = re.compile(r'<div class="item">.*?<span class="title">(?P<moviename>.*?)</span>'
                     r'.*?导演: (?P<actor>.*?)&nbsp;.*?'
                     r'<br>(?P<year>.*?)&nbsp;'
                     r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>'
                     r'.*?<span>(?P<num>.*?)人评价</span>', re.S)

    # 进行正则表达式
    result = obj.finditer(pageSource);
    for item in result:
        moviename = item.group("moviename")
        actor = item.group("actor")
        year = item.group("year").strip() # 去掉字符串两端的空白
        score = item.group("score")
        num = item.group("num")
        # 将获取的数据存取csv文件中
        f.write(f"{moviename},{actor},{year},{score},{num}\n")

print("豆瓣TOP250提取完毕!")
f.close() # 关闭文件
resp.close() # 关闭响应
posted on 2022-12-04 13:31  stone_wei  阅读(229)  评论(0)    收藏  举报