Requests库+正则爬取猫眼电影Top100

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 声明:此篇文章主要是观看静觅教学视频后做的笔记,原教程地址:https://cuiqingcai.com/流程框架1.抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。

声明:此篇文章主要是观看静觅教学视频后做的笔记,原教程地址:https://cuiqingcai.com/

流程框架

1.抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。

2.正则表达式分析:根据HTML代码分析得到电影的名称,主演,上映时间,评分,图片链接等信息

3.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度

4.保存至文件:通过文件的形式将结果保存,每一部电影一个结果一行Json字符串

流程设计

1.maoyan_Spider函数是一个整体的爬虫调度器,其中包含了请求的url地址,headers请求头

def maoyan_Spider(offset):
    """
        作用:猫眼电影调度器
        offset:get的页码参数
    """
    url = 'http://maoyan.com/board/4?offset=' + str(offset)
    headers = {
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
}

    # 获取单页html
    html = get_one_page(url, headers)
    # print(html)
    
    # 将每一页的电影信息解析,并写入文件中
    for item in parse_one_page(html):
        # print(item)
        item_str = json.dumps(item, ensure_ascii=False)
        write_to_file(item_str)

 2.首先以单个网页源代码进行分析,进入到猫眼电影官网榜单,通过构造请求可以拿到http://maoyan.com/board/4?的源码 

def get_one_page(url, headers):
    """
        作用:获取一页的源码
        url:请求地址
        headers:请求头
    """
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

3.接下来感觉整个爬虫的难点就在于解析,源码有了,这里我使用的还是正则来提取数据,稍有字符写错,可能就解析不出来了。下面以Top榜第一名为例进行解析,并转化为json格式保存

<dd>
    <i class="board-index board-index-1">1</i>
    <a href="/films/1203" title="霸王别姬" class="image-link" data-act="boarditem-click" data-val="{movieId:1203}">
        <img src="//ms0.meituan.net/mywww/image/loading_2.e3d934bf.png" alt="" class="poster-default">
        <img alt="霸王别姬" class="board-img" src="http://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c">
    </a>
    <div class="board-item-main">
        <div class="board-item-content">
            <div class="movie-item-info">
                <p class="name"><a href="/films/1203" title="霸王别姬" data-act="boarditem-click" data-val="{movieId:1203}">霸王别姬</a></p>
                <p class="star">主演:张国荣,张丰毅,巩俐</p>
                <p class="releasetime">上映时间:1993-01-01(中国香港)</p>    </div>
            <div class="movie-item-number score-num">
                <p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>        
            </div>

        </div>
    </div>
</dd>

     可以得出其字符串匹配规则是

'<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>'

4.然后通过使用re模块findall方法找到所有电影信息,电影信息包含排名,图片地址,电影名称,主演,上映时间,评分。findall方法返回的是一个元素为元组的列表,然后遍历这些元素通过yield生成json字典形式 

def parse_one_page(html):
    """
        作用:解析一页的源码
        html:网页源码
    """
    pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)".*?name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>', re.S)
    items = pattern.findall(html)
    # print(items)
    for item in items:
        yield {
            'index': item[0],
            'image': item[1],
            'title': item[2],
            'actor': item[3].strip()[3:],
            'time': item[4].strip()[5:],
            'score': item[5]+item[6]
        }

 5.最后是写入文件,因为此处是对每个电影信息进行写入,所以注意写入方法用的是a,不是w。否则写入的内容只有一个电影信息,也就是Top100 

def write_to_file(item):
    """
        作用:往文件中写入内容
        item:处理后的单个电影信息
    """
    with open('result.txt', 'a', encoding='utf-8') as f:
        f.write(item + '\n')

6.完整源码地址:https://github.com/XiaoFei-97/maoyan_Spider-Top100

相关文章
|
JSON 数据格式 Python
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
|
Web App开发 索引
抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
1201 0
|
存储 数据采集
爬虫实例——爬取豆瓣网 top250 电影的信息
本节通过一个具体的实例来看下编写爬虫的具体过程。以爬取豆瓣网 top250 电影的信息为例,top250 电影的网址为:https://movie.douban.com/top250。在浏览器的地址栏里输入 https://movie.douban.com/top250,我们会看到如下内容:
274 0
|
Web App开发 iOS开发 Python
python之爬取某瓣前250排名电影标题
初学者练练手洒洒水
114 0
|
数据采集 索引 Python
Scrapy爬虫(4)爬取豆瓣电影Top250图片
  在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架——Scrapy.   本次分享将详细讲述如何利用Scrapy来下载豆瓣电影Top250, 主要解决的问题有: 如何利用ImagesPipeline来下载图片 如何对下载后的图片重命名,这是因为Scrapy默认用Hash值来保存文件,这并不是我们想要的   首先我们要爬取的豆瓣电影Top250网页截图如下:   网页的结构并不复杂,所以,我们决定把所有的250部电影的图片都下载下来。
1908 0
|
Web App开发 Python Windows
python爬取猫眼电影 top 100 保存到CSV
代码没含量,希望帮到入门的小白。 import requests import re,json from lxml import etree import csv class Spider(): def open_csv(self): ...
1808 0
爬取豆瓣电影top250并简单分析
代码: import requests from bs4 import BeautifulSoup import pymongo import re client = pymongo.
1174 0
|
8月前
|
数据采集 存储 JavaScript
(2024)豆瓣电影TOP250爬虫详细讲解和代码
这是一个关于如何用Python爬取2024年豆瓣电影Top250的详细教程。教程涵盖了生成分页URL列表和解析页面以获取电影信息的函数。`getAllPageUrl()` 生成前10页的链接,而`getMoiveListByUrl()` 使用PyQuery解析HTML,提取电影标题、封面、评价数和评分。代码示例展示了测试这些函数的方法,输出包括电影详情的字典列表。
423 3
gevent爬取豆瓣电影top250
采用协程来实现快速抓取页面信息 出处:https://github.com/jingsupo/python-spider/blob/master/day07/douban/04douban_gevent.
1404 0
|
数据采集
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
【详细步骤解析】爬虫小练习——爬取豆瓣Top250电影,最后以csv文件保存,附源码
334 0

热门文章

最新文章