requests+re(正则)之猫眼top100排名信息爬取

这篇博客介绍怎么爬取猫眼top100的排名,网址,评分等。使用的是爬虫技术最基础的requests请求加re(正则)提取。

有时候我们看电影会不知道看什么电影比较好,一般打开电影排名,还得一下下的点击到电影排行页面。所以就有了这个爬虫,直接就能得到猫眼的电影排名和他的网址,岂不乐哉。

我们先打开到猫眼的top100页面:https://maoyan.com/board/4?

然后点击到第二页:https://maoyan.com/board/4?offset=10

点击第三页:https://maoyan.com/board/4?offset=20

然后我们就发现只需改变网址后面的offset值就能达到翻页效果,因为编程语言第一个数字是从0开始的,所以直接i*10写个循环就饿能翻页了。

代码:

import requests, re, json
from requests.exceptions import RequestException
from my_fake_useragent import UserAgent

def get_one_page(url):
    headers = {
        ‘User-Agent‘: UserAgent().random()
    }
    try:
        reponse = requests.get(url, headers=headers)
        if reponse.status_code == 200:
            print("ok!")
        return None
    except RequestException:
        return None

def main(offset):
    url = ‘https://maoyan.com/board/4?offset=‘ + str(offset)
    get_one_page(url)

if __name__ == ‘__main__‘:
    for i in range(10):
        main(i * 10)

运行结果:

C:\Users\User\AppData\Local\Programs\Python\Python37\python.exe G:/Python/code/requeats/try.py
ok!
ok!
ok!
ok!
ok!
ok!
ok!
ok!
ok!
ok!

看来十个网址都能请求到,然后进行下一步。

一般使用正则时,我喜欢查看源码来写re,因为源码是网页请求时真正的代码,F12开发者模式下看到的井井有序的代码是进过CSS渲染等后期处理好了的格式,所以两者有些不同。

我们右键点查看源码。然后CTRL+F查找排行第一的“霸王别姬”。我们能看到这一串代码:

 <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}">

然后我们代开霸王别姬的页面,他的URL是:https://maoyan.com/films/1203,我们发现他的后半部分/films/1203也在所截取的代码中。

这样我们就可以构造一个re:“>(.*?)</i>\s*<a href="(.*?)" title="(.*?)" class="image-link”,把我们需要的部分改为(,*?),因为代码有换行的地方,所以要在回车部位加上\s*。

PS:正则的具体用法我们不例举。

最后在写入一个TXT文件。

import requests, re, json
from requests.exceptions import RequestException
from my_fake_useragent import UserAgent

def get_one_page(url):
    headers = {
        ‘User-Agent‘: UserAgent().random()
    }
    try:
        reponse = requests.get(url, headers=headers)
        if reponse.status_code == 200:
            return reponse.text
        return None
    except RequestException:
        return None

def parse_one_page(html):
    pattern = re.compile(‘>(.*?)</i>\s*<a href="(.*?)" title="(.*?)" class="image-link‘)
    items = re.findall(pattern, html)
    for item in items:
        yield {
            ‘index‘: item[0],
            ‘image‘: ‘http://maoyan.com‘ + item[1],
            ‘title‘: item[2]
        }

def write_to_file(content):
    with open(‘maoyan.txt‘, ‘a‘, encoding=‘UTF-8‘) as f:
        f.write(json.dumps(content, ensure_ascii=False) + ‘\n‘)

def main(offset):
    url = ‘https://maoyan.com/board/4?offset=‘ + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)

if __name__ == ‘__main__‘:
    for i in range(10):
        main(i * 10)

一般我的规律是能用xpath用xpath,其次用re,再其次用bs4。他们的写法都按照xpath的写法一样,一层一层的找下去。但是一般的爬虫,我们使用正则完全没必要那么麻烦,直接找到要爬取地方,复制,把要提取部位改为(,*?)就完全能满足普通爬虫的需要,而且这样做也很快捷。

上面我只是写入了TXT文件,如有需要可以改为CSV格式等。

这里我只提取了排名,网址和电影名。如果有其他爬取类容,请自行添加。

原文地址:https://www.cnblogs.com/zj666666/p/12330820.html

时间: 2024-11-07 17:50:23

requests+re(正则)之猫眼top100排名信息爬取的相关文章

链家信息爬取

一.数据库封装 import pymysql class MysqlHelper(object):    def __init__(self):        self.db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='abc123', database='py1011', charset='utf8')        self.cursor = self.db.cursor() def execut

爬虫系列之链家的信息爬取及数据分析

关于链家的数据爬取和分析 已经实现 1.房屋数据爬取并下载 2.房屋按区域分析 3.房屋按经纪人分析 4.前十经纪人 5.经纪人最有可能的位置分析 6.实现以地区划分房屋 目前存在的问题: 1.多线程下载的时候会出现个别文件不继续写入了(已经解决) 2.未考虑经纪人重名问题 3.查询中发现不是每次都能 get 到 url 的数据,具体原因可能跟header有关,或者网站反扒(已经解决,手机端的header有时候访问pc端会出现None的情况) 4.守护线程那里应该出问题了,如果有文件储存完成,其

python requests模拟登陆正方教务管理系统,并爬取成绩

最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=requests.Session() response = session.get(login_url, headers=header) cookies = response.cookies for c in cookies: cookie = c.name + '=' + c.value print('

【Python】博客信息爬取-微信消息自动发送

1.环境安装 python -m pip install --upgrade pip pip install bs4 pip install wxpy pip install lxml 2.博客爬取及发送 from bs4 import BeautifulSoup from threading import Timer import requests import traceback from wxpy import * url = '' nIndex = 6 my_groups = None

抖音分享页用户信息爬取

其实这个是有客户要求做的,但我完成的不够完美.过来分享出来好了~ 首先,你知道抖音有一个用户分享页吧? 像这样的:https://www.douyin.com/share/user/58841646784 F12查看代码. ok,可以看到有数字的地方都做了字体反爬,比如抖音id上的数字啊,粉丝数这些. 那我们这样子,先把它的这个字体文件下载下来 在开发者工具中选择Network筛选font后刷新网页就能找到这个字体了,如下图: 然后复制链接到新窗口打开就能下载字体了. 这是我下到的字体 下一步就

多线程抓获猫眼Top100电影信息

import requestsimport parselimport timeimport threading # 模拟浏览器headers = {"Referer": "https://maoyan.com/board/4?offset=0", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \

抖音用户信息爬取案例 &#197057;

原文: http://blog.gqylpy.com/gqy/416 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

Python-wxpy信息爬取发送至微信(小白级)

Wxpy初体验 1.1 安装wxpy 在这里默认大家以及安装好了pip,我们需要安装wxpy 以及wechat_sender 两个包,这里推荐使用国内的豆瓣源,如果大家网速过硬 请忽略.. 1 2 pip install wxpy -i "https://pypi.doubanio.com/simple/" pip install wechat_sender -i "https://pypi.doubanio.com/simple/" 1.2 wxpy 登陆 wxp

Scrapy项目 - 数据简析 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

一.数据分析截图(weka数据分析截图 ) 本例实验,使用Weka 3.7对豆瓣电影网页上所罗列的上映电影信息,如:标题.主要信息(年份.国家.类型)和评分等的信息进行数据分析,Weka 3.7数据分析如下所示: 图1-1  数据分析主界面 图1-2  OneR数据分析界面 图1-3  ZeroR数据分析界面 图1-4 Visualize数据分析界面 二.数据分析结论:(将数据之间的关系用文字性描述) 如图2-1所示,显而易见,电影类型的趋势增量随着标题的繁杂而日益增长,仅对于整个国家层次来说,