爬虫:爬取猫眼电影top100(代码片段)

FelixWang FelixWang     2022-10-31     463

关键词:

一:分析网站

目标站和目标数据
目标地址:http://maoyan.com/board/4?offset=20
目标数据:目标地址页面的电影列表,包括电影名,电影图片,主演,上映日期以及评分。

二:上代码

(1):导入相应的包

import requests
from requests.exceptions import RequestException # 处理请求异常
import re
import pymysql
import json
from multiprocessing import Pool

(2):分析网页

通过检查发现需要的内容位于网页中的<dd>标签内。通过翻页发现url中的参数的变化。

(3):获取html网页

# 获取一页的数据
def get_one_page(url):
    # requests会产生异常
    headers = 
        \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\',
    
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:  # 状态码是200表示成功
            return response.text
        else:
            return None
    except RequestException:
        return None

(4):通过正则提取需要的信息 --》正则表达式详情

# 解析网页内容
def parse_one_page(html):
    pattern = re.compile(
        \'<dd>.*?board-index.*?>(\\d+)</i>.*?data-src="(.*?)".*?class="name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>\',
        re.S)  # re.S可以匹配任意字符包括换行
    items = re.findall(pattern, html)  # 将括号中的内容提取出来
    for item in items:
        yield   # 构造一个生成器
            \'index\': item[0].strip(),
            \'title\': item[2].strip(),
            \'actor\': item[3].strip()[3:],
            \'score\': \'\'.join([item[5].strip(), item[6].strip()]),
            \'pub_time\': item[4].strip()[5:],
            \'img_url\': item[1].strip(),
        

(5):将获取的内容存入mysql数据库

# 连接数据库,首先要在本地创建好数据库
def commit_to_sql(dic):
    conn = pymysql.connect(host=\'localhost\', port=3306, user=\'mydb\', passwd=\'123456\', db=\'maoyantop100\',
                           charset=\'utf8\')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置游标的数据类型为字典
    sql = \'\'\'insert into movies_top_100(mid,title,actor,score,pub_time,img_url) values("%s","%s","%s","%s","%s","%s")\'\'\' % (
        dic[\'index\'], dic[\'title\'], dic[\'actor\'], dic[\'score\'], dic[\'pub_time\'], dic[\'img_url\'],)
    cursor.execute(sql)  # 执行sql语句并返回受影响的行数
    # # 提交
    conn.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()

(6):主程序及运行

def main(url):
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        commit_to_sql(item)


if __name__ == \'__main__\':
    urls = [\'http://maoyan.com/board/4?offset=\'.format(i) for i in range(0, 100, 10)]
    # 使用多进程
    pool = Pool()
    pool.map(main, urls)

 (7):最后的结果

 

完整代码:

# -*- coding: utf-8 -*-
# @Author  : FELIX
# @Date    : 2018/4/4 9:29

import requests
from requests.exceptions import RequestException
import re
import pymysql
import json
from multiprocessing import Pool


# 连接数据库
def commit_to_sql(dic):
    conn = pymysql.connect(host=\'localhost\', port=3306, user=\'wang\', passwd=\'123456\', db=\'maoyantop100\',
                           charset=\'utf8\')
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 设置游标的数据类型为字典
    sql = \'\'\'insert into movies_top_100(mid,title,actor,score,pub_time,img_url) values("%s","%s","%s","%s","%s","%s")\'\'\' % (
        dic[\'index\'], dic[\'title\'], dic[\'actor\'], dic[\'score\'], dic[\'pub_time\'], dic[\'img_url\'],)
    cursor.execute(sql)  # 执行sql语句并返回受影响的行数
    # # 提交
    conn.commit()
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()


# 获取一页的数据
def get_one_page(url):
    # requests会产生异常
    headers = 
        \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\',
    
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:  # 状态码是200表示成功
            return response.text
        else:
            return None
    except RequestException:
        return None


# 解析网页内容
def parse_one_page(html):
    pattern = re.compile(
        \'<dd>.*?board-index.*?>(\\d+)</i>.*?data-src="(.*?)".*?class="name"><a.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>\',
        re.S)  # re.S可以匹配任意字符包括换行
    items = re.findall(pattern, html)  # 将括号中的内容提取出来
    for item in items:
        yield   # 构造一个生成器
            \'index\': item[0].strip(),
            \'title\': item[2].strip(),
            \'actor\': item[3].strip()[3:],
            \'score\': \'\'.join([item[5].strip(), item[6].strip()]),
            \'pub_time\': item[4].strip()[5:],
            \'img_url\': item[1].strip(),
        
    # print(items)


def write_to_file(content):
    with open(\'result.txt\', \'a\', encoding=\'utf8\')as f:
        f.write(json.dumps(content, ensure_ascii=False) + \'\\n\')


ii = 0


def main(url):
    html = get_one_page(url)
    for item in parse_one_page(html):
        global ii
        print(ii, item)
        ii = ii + 1
        commit_to_sql(item)
        write_to_file(item)


# print(html)


if __name__ == \'__main__\':
    urls = [\'http://maoyan.com/board/4?offset=\'.format(i) for i in range(0, 100, 10)]
    # 使用多进程
    pool = Pool()
    pool.map(main, urls)

 

python爬虫获取猫眼top100电影信息(上)(代码片段)

准备工作需要用到的库importrequests#获取url的信息frombs4importBeautifulSoup#html内容解析importre#正则表达式fromfontTools.ttLibimportTTFont#解析自定义字体要爬取的目标urlhttps://maoyan.com/films/1200486计划要爬取的指标电影名称(中英)、类型、上映... 查看详情

python应用-爬取猫眼电影top100(代码片段)

importrequestsimportreimportjsonimporttimefromrequests.exceptionsimportRequestExceptiondefget_one_page(url):try:headers='User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.3 查看详情

00_抓取猫眼电影排行top100(代码片段)

前言:学习python3爬虫大概有一周的时间,熟悉了爬虫的一些基本原理和基本库的使用,本次就准备利用requests库和正则表达式来抓取猫眼电影排行TOP100的相关内容。1、本次目标:需要爬去出猫眼电影排行TOP100的电影相关信息,... 查看详情

爬虫(猫眼电影+校花网+github+今日头条+拉钩)(代码片段)

 Requests+正则表达式爬取猫眼TOP100榜电影信息MARK:将信息写入文件解决乱码方法,开启进程池秒爬。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import requestsfrom requests.except 查看详情

requests+正则爬取猫眼电影top100(代码片段)

(一)目标站点的分析首先打开我们的目标网站,发现每一页有十个电影,最下面有分页标志,而分页只改变的是标签后缀,如下:而后可以在网页按f12打开源代码管理,查看网页每处信息对应的源代码形式,如下图: (二... 查看详情

网站爬取-案例一:猫眼电影top100

今天有小朋友说想看一下猫眼TOP100的爬取数据,要TOP100的名单,让我给发过去,其实很简单,先来看下目标网站:建议大家都用谷歌浏览器:这是我们要抓取的内容,100个数据,很少我们看一下页面结构100部电影分十个页码,也... 查看详情

20170513爬取猫眼电影top100

importjsonimportreimportrequestsfrombs4importBeautifulSoupfromrequestsimportRequestExceptionfrommultiprocessingimportPooldefget_one_page(url):headers={‘User-Agent‘:‘baiduspider+‘}try:response=requests 查看详情

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

流程框架:抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果。正则表达式分析:根据HTML代码分析得到电影和名称、主演、上映时间、评分、图片链接等信息。开启循环及多线程:对多页内容遍历,开启... 查看详情

使用requests爬取猫眼电影top100榜单

...眼电影的TOP100榜进行抓取。1获得页面。 首先确定要爬取的url为http://maoyan.com/board/4,通过requests模块,打印出页面的信息defget_a_page( 查看详情

pyspider抓取猫眼电影top100(代码片段)

"""抓取猫眼电影TOP100"""importreimporttimeimportrequestsfrombs4importBeautifulSoupclassSpiderMaoyan(object):def__init__(self):#通过分析URL可以发现,猫眼电影TOP100页面是通过offset+10来分页的self.url="http://maoyan.com/board/4?off 查看详情

python爬虫编程思想(37):项目实战:抓取猫眼电影top100榜单

本文会使用urllib3抓取猫眼电影Top100榜单,读者使用下面的URL进入Top100榜单页面。https://maoyan.com/board/4Top100榜单页面如图1所示。        从Top100榜单页面可以看出,每一页有10部电影,共10页,一共100部... 查看详情

爬取猫眼top100(代码片段)

importurllib.requestimportrandomimportreimportjson‘‘‘解决访问403的问题,需要模仿浏览器访问‘‘‘my_headers=["Mozilla/5.0(WindowsNT6.3;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/39.0.2171.95Safari/537.36","Mozilla/5. 查看详情

对猫眼电影排行的爬取(代码片段)

1.目标: 对猫眼电影前100名的爬取,并将结果以文件的形式保存下来2.准备工作:requests库3.抓取分析 offset代表偏移量值,分开请求10次,就可以获取前100的电影4.抓取首页5.正则提取6.文件提取7.代码整合8.每页爬取总代码... 查看详情

requests库爬取猫眼电影“最受期待榜”榜单--网络爬虫(代码片段)

目标站点:https://maoyan.com/board/6#coding:utf8importrequests,re,jsonfromrequests.exceptionsimportRequestException#frommultiprocessingimportPool#获取页面defget_one_page(url):try:resp=requests.get(url)ifresp.s 查看详情

抓取猫眼top100电影信息

...=‘+str(offset)3.卡发者选项,查看排行的电影信息,我们要爬取电影的排行(index),图片的url,标题(title),演员,上映时间,评分。4.获取首页的html代码,1user_agent=‘Mo 查看详情

爬取猫眼及可视化(代码片段)

一、主题式网络爬虫设计方案1,主题式网络爬虫名称:爬取猫眼电影TOP1002,主题式网络爬虫爬取的内容与数据特征分析:爬取内容为:电影名,得分,数据特征分析:将其储存于xlsx文件中3.主题式网络爬虫设计方案概述(包括... 查看详情

python爬虫应用实战案例-pyquery在爬虫中的应用,爬取猫眼电影数据(代码片段)

什么是pyquerypyquery是类似于jquery的网页解析工具,让你使用jquery的风格来遍历xml文档,它使用lxml操作html的xml文档,它的语法与jquery很像,和我们之前所讲的解析库xpath与BeautifulSoup比起来更加灵活与简便,并且增加了添加类和移... 查看详情

python爬虫入门爬取豆瓣电影top250(代码片段)

python爬虫入门(6):爬取豆瓣电影top250本次用re库实现爬取豆瓣电影top250的第一页,当网页换页的时候start参数会变,暂未实现爬取后续内容有些网页的信息不直接在网页源代码中显示,有些网页会在网页源代码显示,所以... 查看详情