requests模块爬取豆瓣2020-top250

挺简陋的一个爬虫,没有爬取图片,只是排名和电影名称等基本信息,代码量很少

import re
import requests
import csv
"""
豆瓣top250为静态网页,爬取较为简单,关键在于正则匹配字符串要写对
"""


def get_content(target):
    # 必要的ua头,一般网站都对ua头有检测,常见的反爬机制
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0"
    }
    resp = requests.get(target, headers=headers)  # 发送requests请求获取页面内容
    resp_content = resp.text  # 页面内容转换为文本格式
    # 最容易出错的一步,建议匹配一处就打印一处,方便排错
    regix = re.compile(r'<li>.*?<em class="">(?P<rank>.*?)</em>.*?<span class="title">(?P<name>.*?)' +
                       r'</span>.*?&nbsp;.*?(?P<year>\d+)&nbsp;.*?property="v:average">(?P<score>.*?)' +
                       r'</span>.*?<span>(?P<num>\d+)人评价</span>.*?<span class="inq">(?P<words>.*?)</span>', re.S)

    result = regix.finditer(resp_content)  # 使用finditer方法将结果加载到迭代器中
    return result


if __name__ == '__main__':
    for num in range(0, 250, 25):
        url = "https://movie.douban.com/top250?start="+str(num)+"&filter="  # 要爬取页面的url
        f = open('data.csv', mode='a', encoding='utf-8')  # 使用csv格式,写入的数据会自动以逗号分隔
        csv_write = csv.writer(f)

        for i in get_content(url):
            # 使用循环打印内容排错
            # print(i["rank"])
            # print(i.group("name"))
            # print(i.group("year").strip())
            # print(i.group("score"))
            # print(i.group("num"))
            # print(f'“{i.group("words")}”')
            dic = i.groupdict()  # 将内容写入到字典中
            dic['year'] = dic["year"].strip()
            csv_write.writerow(dic.values())
    f.close()
    print("[+]Task Done!")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值