资讯专栏INFORMATION COLUMN

Requests+正则表达式爬取猫眼电影

30e8336b8229 / 1134人阅读

摘要:目标通过正则表达式爬取猫眼电影电影的排名名字电影封面图片主演上映时间猫眼评分,将爬取的内容写入文件中。为了加快爬取网页的速度,可以开启循环和多线程当需要爬取的信息很大时,这是一个不错的技巧。

目标

通过Request+正则表达式爬取猫眼电影TOP100电影的排名、名字、电影封面图片、主演、上映时间、猫眼评分,将爬取的内容写入文件中。

流程框架

进入到猫眼电影TOP100的页面,此时的URL为http://maoyan.com/board/4,点击第2页,会发现此时的URL为http://maoyan.com/board/4?offset=10,点击第3页,会发现URL变成了http://maoyan.com/board/4?offset=20,由此可以推断出offset参数为偏移量,如果偏移量为n,则显示电影序号就是n+1到n+10,每页显示10个,所以,如果想获取TOP100电影,只需要分开请求10次,而10次的offset参数分别设置为0、10、20......90即可,这样获取不同的页面之后,再用正则表达式提取出相关信息,就可以得到TOP100的所有电影信息了。获取信息后,可以将信息写入txt文件,当然可以存入数据库(此处为了偷懒,就不存入数据库了)。为了加快爬取网页的速度,可以开启循环和多线程(当需要爬取的信息很大时,这是一个不错的技巧)。

下图展示了具体的流程框架:

(1)抓取单页内容
# 获取单个页面的HTML代码
def get_one_page(url):
    try:
        # 此处如果不加headers进行伪装,将会返回403错误(拒绝访问)
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"
        }
        response = requests.get(url, headers = headers)
        # 如果返回的状态码是200,表示请求正常,返回页面HTML代码
        # 否则,返回None
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

接下来测试一下是否可以获取页面内容:

if __name__ == "__main__":
    url = "http://maoyan.com/board/4"
    html = get_one_page(url)
    print(html)
(2)正则表达式分析

可以对get_one_page(url)函数爬取的HTML代码进行分析(此处为了方便观看,直接在浏览器控制台分析),利用正则表达式获取到有用的信息(电影的排名、名字、电影封面图片、主演、上映时间、猫眼评分)。

# 解析单个页面的HTML代码,利用re模块提取出有效信息
def parse_one_page(html):
    # re.S:表示“.”的作用扩展到整个字符串,包括“
”
    pattern = re.compile("
.*?board-index.*?>(d+).*?data-src="(.*?)".*?name">(.*?).*?star">(.*?)

.*?releasetime">(.*?)

.*?integer">" +"(.*?).*?fraction">(.*?).*?
", re.S) items = re.findall(pattern, html) 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] }

接下来测试一下是否可以得到我们想要的内容:

if __name__ == "__main__":
    url = "http://maoyan.com/board/4"
    html = get_one_page(url)
    items = parse_one_page(html)
    for item in items:
        print(item)

控制台输出如下:

单个页面信息解析正确,那么,想要获得多个页面的信息,只需写一个循环遍历即可:

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

if __name__ == "__main__":
    for i in range(10):
        main(i*10)
(3)保存至文件

只需写一个简单的函数即可完成,但此处需要注意一点,为保证输出文件为中文,在读写文件时要添加参数endcoding="utf-8"

# 将解析出的内容写入文件
def write_to_file(content):
    # 添加endcoding="utf-8"确保输出到文件中为中文
    with open("result.txt", "a", encoding="utf-8 ") as f:
        # 此处建议将解析出的内容编码为json格式再写入文件,json的好处在此不过多叙述
        # 如果使用了json进行编码,务必添加参数ensure_ascii=False确保编码数据为中文
        # json.dumps():编码json数据
        f.write(json.dumps(content, ensure_ascii=False) + "
")
        f.close()

运行代码,目标信息被写入result.txt文件中:

(4)开启循环及多线程

为了加快页面爬取速度,可以使用多线程(针对大量数据时非常有效)。

if __name__ == "__main__":
    pool = Pool()
    pool.map(main, [i*10 for i in range(10)])
项目完整代码已托管到github:https://github.com/panjings/p...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42751.html

相关文章

  • python正则达式简单爬虫入门+案例(爬取猫眼电影TOP榜)

    摘要:用迭代进行异步操作保存写入文件配置启动函数使用多进程加速一秒完成 用正则表达式实现一个简单的小爬虫 常用方法介绍 1、导入工具包 import requests #导入请求模块 from flask import json #导入json模块 from requests.exceptions import RequestException #异常捕捉模块 import re #导入正则...

    xiaowugui666 评论0 收藏0
  • requests+正则达式+multiprocessing多线程抓取猫眼电影TOP100

    摘要:本文介绍利用库库和正则表达式爬取猫眼电影电影的相关信息,提取出电影名称上映时间评分封面图片等信息,将爬取的内容写入到文件中。获取到不同的网页后使用正则表达式提取出我们要的信息,就可以得到电影信息了,可以使用多线程加速爬取。 本文介绍利用Requests库、multiprocessing库和正则表达式爬取猫眼电影TOP100电影的相关信息,提取出电影名称、上映时间、评分、封面图片等信息,...

    jifei 评论0 收藏0
  • Python3网络爬虫实战---27、Requests正则达式抓取猫眼电影排行

    摘要:所以我们如果想获取电影,只需要分开请求次,而次的参数设置为,,,,即可,这样我们获取不同的页面结果之后再用正则表达式提取出相关信息就可以得到的所有电影信息了。上一篇文章网络爬虫实战正则表达式下一篇文章网络爬虫实战解析库的使用 上一篇文章:Python3网络爬虫实战---26、正则表达式下一篇文章:Python3网络爬虫实战---28、解析库的使用:XPath 本节我们利用 Reque...

    SwordFly 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 实战!《长津湖》为什么这么火爆?我用 Python 来分析猫眼影评

    摘要:作者周萝卜链接长津湖猫眼影评欢迎关注,专注数据分析数据挖掘好玩工具对于这个十一黄金周的电影市场,绝对是长津湖的天下,短短几天,票房就已经突破亿,大有奋起直追战狼的尽头。 ...

    lijy91 评论0 收藏0

发表评论

0条评论

30e8336b8229

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<