豆瓣top250

一、分析目标URL

豆瓣电影Top250首页URL:
点击下一页查看URL变为:
再次点击下一页:
由此分析出URL有两个参数:start,filter,每过一页参数start+25,而参数filter一直为空!

二、使用步骤

1.引入库

首先需要导入requests库和re库 (没下载的需要pip insatall requests)
代码如下(示例):

import re
import requests

2.得到需要爬取的10个URL

我将它封装成了函数

def URL_list():  # 构建URL列表
    urls = []
    # 根据URL的规律进行构建
    for k in range(0, 250, 25):
        url = "https://movie.douban.com/top250?start=' + str(k) + '&filter="
        urls.append(url)
    return urls  # 返回含有十个URL的列表

3.爬取页面源代码并解析

    # 正则匹配,这里主要爬取电影名,上映年份,评分和评价人数
    obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
                r'</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp'
                r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)'
                r'</span>.*?<span>(?P<num>.*?)</span>', re.S)
    urls = URL_list()  # 得到目标url列表
    data = []  # 用来存放解析后的数据
    headers = {
        "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36"
    }
    for url in urls:
        response = requests.get(url, headers=headers)
        content = response.text  # 页面源代码
        it = obj.finditer(content)
        for item in it:
            data.append(item.group('name'))
            data.append(' ')
            data.append(item.group('year').strip())
            data.append(' ')
            data.append(item.group('score'))
            data.append(' ')
            data.append(item.group('num'))
            data.append('\n')
        response.close()
        # print(data)
    print('爬虫完成!')
    # 再将结果写入txt文件
    with open('豆瓣top250.txt', 'w', encoding='utf-8')as f:
        for i in data:
            f.write(i)
        print('成功存入文件!')

4.源代码

# coding:utf-8

import re
import requests

# 爬取豆瓣电影 Top 250
"""
1.拿到页面源代码
2.通过re提取想要的信息
"""

# url = "https://movie.douban.com/top250?start=xxx&filter="

def URL_list():  # 构建URL列表
    urls = []
    # 根据URL的规律进行构建
    for k in range(0, 250, 25):
        url = "https://movie.douban.com/top250?start=' + str(k) + '&filter="
        urls.append(url)
    return urls  # 返回含有十个URL的列表

if __name__ == '__main__':
    # 正则匹配
    obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)'
                r'</span>.*?<p class="">.*?<br>(?P<year>.*?)&nbsp'
                r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)'
                r'</span>.*?<span>(?P<num>.*?)</span>', re.S)
    urls = URL_list()  # 得到目标url列表
    data = []  # 用来存放解析后的数据
    headers = {
        "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Mobile Safari/537.36"
    }
    for url in urls:
        response = requests.get(url, headers=headers)
        content = response.text  # 页面源代码
        it = obj.finditer(content)
        for item in it:
            data.append(item.group('name'))
            data.append(' ')
            data.append(item.group('year').strip())
            data.append(' ')
            data.append(item.group('score'))
            data.append(' ')
            data.append(item.group('num'))
            data.append('\n')
        response.close()
        # print(data)
    print('爬虫完成!')
    # 再将结果写入txt文件
    with open('豆瓣top250.txt', 'w', encoding='utf-8')as f:
        for i in data:
            f.write(i)
        print('成功存入文件!')

5.爬虫成果


总结:

总的来说这只是个demo,还有许多需要改进的地方,比如可以将数据存入exel文件或者csv文件,也可以把爬取过程封装成一个函数,优化正则或者优化数据的格式等等。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值