爬虫实战01——爬取猫眼电影top100榜单

#需求:抓取猫眼电影TOP100的电影名称、时间、评分、图片等信息,提取的结果会以文件的形式保存下来
import requests
import time
from lxml import etree
import json
import csv
import codecs

class MaoYanTop100Spider:
    #存储电影详情页的url
    film_page_url_list = []
    #存储每个的电影信息
    #film_info = {}
    film_info_list = []

    # 1.获取电影列表页数据
    def Top100_list(self, session, headers):
        #1.1向列表页发送请求
        #https://maoyan.com/board/4?offset=20
        #(1)固定url
        base_url = "https://maoyan.com/board/4"
        #(2)url变化部分:
        for i in range(0, 91, 10):
            #(3)拼接URL:
            final_url = base_url + "?offset=" + str(i)
            #(4)发送请求:
            time.sleep(5)
            response = session.get(url=final_url, headers=headers)
            #1.2解析列表页
            film_list_page_data = response.content.decode("utf-8")
            #1.2.1使用xpath解析数据
            #(1)转类型
            xpath_data = etree.HTML(film_list_page_data)
            #(2)
            #/dl/dd[1]/a
            #dl/dd[10]/a/img[2]
            # dl / dd[2] / a / img[2]
            for xpath_num in range(1, 11):
                # 电影名称
                #dl/dd[1]/a
                film_name = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/a/@title‘)[0]

                # 时间
                #//*[@id="app"]/div/div/div[1]/dl/dd[1]/div/div/div[1]/p[3]
                #dl/dd[1]/div/div/div[1]/p[3]
                #dl/dd[2]/div/div/div[1]/p[3]
                film_time = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/div/div/div[1]/p[3]/text()‘)[0][5:].strip()

                # 主演
                #dl/dd[1]/div/div/div[1]/p[2]
                film_actors = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/div/div/div[1]/p[2]/text()‘)[0].strip()[3:]

                # 评分
                #dl/dd[1]/div/div/div[2]/p/i[1]
                score_int = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/div/div/div[2]/p/i[1]/text()‘)[0]
                #dl/dd[1]/div/div/div[2]/p/i[2]
                score_fraction = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/div/div/div[2]/p/i[2]/text()‘)[0]
                film_score = str(score_int) + str(score_fraction)
                # 图片
                #dl/dd[1]/a/img[2]
                #dl/dd[1]/a/img[2]
                film_img = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/a/img[2]/@data-src‘)[0]

                # 详情页url
                #dl/dd[1]/div/div/div[1]/p[1]/a
                #dl/dd[1]/div/div/div[1]/p[1]/a
                film_url = xpath_data.xpath(‘//dl[@class="board-wrapper"]/dd[‘ + str(xpath_num) + ‘]/div/div/div[1]/p[1]/a/@href‘)[0]

                #电影信息
                film_info = {}
                film_info["name"] = film_name
                film_info["time"] = film_time
                film_info["actors"] = film_actors
                film_info["score"] = film_score
                film_info["img"] = film_img
                film_info["url"] = film_url
                self.film_info_list.append(film_info)
                #print(film_info)
                #详情页url
                self.film_page_url_list.append(film_url)

    # 2.获取电影详情页数据
    def film_page(self, url, session, headers, num):
        #2.1向详情页发送请求
        base_url = "https://maoyan.com"
        final_url = base_url + str(url)
        print(final_url)
        time.sleep(3)
        response = session.get(url=final_url, headers=headers)
        data = response.content.decode("utf-8")
        #print(response)
        #2.2解析详情页
        xpath_data = etree.HTML(data)
        #//*[@id="app"]/div/div[1]/div/div[2]/div[1]/div[1]/div[2]/span
        film_summary = xpath_data.xpath(‘//span[@class="dra"]/text()‘)[0].strip()
        #print(film_summary)
        self.film_info_list[num]["summary"] = film_summary

    #将数据保存至CSV文件
    def save_data(self):
        #1.读取json文件,创建csv文件
        #json_fp = open("new.json", "r")
        csv_fp = codecs.open("maoyan.csv", "w", "utf-8")
        #2.提出csv文件表头,表内容
        #2.1 表头
        #data_list = json.load(json_fp)
        title_list = self.film_info_list[0].keys()

        #2.2 表内容
        excel_data = []
        for data in self.film_info_list:
            excel_data.append(data.values())
        #3.使用csv写入器,写入文件
        #3.1创建csv写入器
        csv_writer = csv.writer(csv_fp)
        #3.2写入表头和表内容
        #(1)写入表头
        csv_writer.writerow(title_list)
        #(2)写入表内容
        csv_writer.writerows(excel_data)
        #4.关闭csv文件和json文件
        #json_fp.close()
        csv_fp.close()

    #运行:
    def run(self):
        #0.创建session,维持会话
        session = requests.Session()
        #0.1请求头:headers
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        }
        #1.获取电影列表页数据
        self.Top100_list(session=session, headers=headers)
        #print(self.film_info_list)
        #2.获取电影详情页数据
        for i, film_page_url in enumerate(self.film_page_url_list):
            self.film_page(url=film_page_url, session=session, headers=headers, num=i)
            print(self.film_info_list[i])

        #3.保存数据
        self.save_data()

MaoYanTop100Spider().run()

原文地址:https://www.cnblogs.com/tommyngx/p/11182661.html

时间: 2024-10-14 22:14:52

爬虫实战01——爬取猫眼电影top100榜单的相关文章

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

Requests是一个很方便的python网络编程库,用官方的话是"非转基因,可以安全食用".里面封装了很多的方法,避免了urllib/urllib2的繁琐. 这一节使用requests库对猫眼电影的TOP100榜进行抓取. 1 获得页面. 首先确定要爬取的url为http://maoyan.com/board/4,通过requests模块,打印出页面的信息 def get_a_page(url): try: response = requests.get(url) if respon

python学习之抓取猫眼电影Top100榜单

目录 1 本篇目标 2 url分析 3 页面抓取 4 页面分析 5 代码整合 6 优化 参考: 近期开始学习python爬虫,熟悉了基本库.解析库之后,决定做个小Demo来实践下,检验学习成果. 1 本篇目标 抓取猫眼电影总排行榜Top100电影单 根据电影演员表统计演员上榜次数 2 url分析 目标站点为https://maoyan.com/board/4,打开之后就可以看到排行榜信息,如图所示 页面上显示10部电影,有名次.影片名称.演员信息等信息.当拉到最下面点击第二页的时候,发现url变

# [爬虫Demo] pyquery+csv爬取猫眼电影top100

目录 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 代码君 [爬虫Demo] pyquery+csv爬取猫眼电影top100 站点分析 https://maoyan.com/board/4?offset=0 翻页操作只会改变offset偏移量,每部电影的信息都在dd标签内,使用pyquery库中的css选择器直接解析页面 代码君 css选择器直接选择和使用find()方法的区别:find()用于选择子节点,因此限定了选择的区域,速度可能要快些,直接传入''选择器可能

python爬取猫眼电影top100排行榜

爬取猫眼电影TOP100(http://maoyan.com/board/4?offset=90)1). 爬取内容: 电影名称,主演, 上映时间,图片url地址保存到mariadb数据库中;2). 所有的图片保存到本地/mnt/maoyan/电影名.png 代码: import re import pymysql as mysql from urllib import request from urllib.request import urlopen u = 'root' p = 'root'

python爬虫,爬取猫眼电影top100

import requests from bs4 import BeautifulSoup url_list = [] all_name = [] all_num = [] all_actor = [] all_score = [] class Product_url(): # 这个地方传入的url是 https://maoyan.com/board/4?offset= global url_list def __init__(self, url): self.url = url for x i

python爬取猫眼电影top100

最近想研究下python爬虫,于是就找了些练习项目试试手,熟悉一下,猫眼电影可能就是那种最简单的了. 1 看下猫眼电影的top100页面 分了10页,url为:https://maoyan.com/board/4?offset=0 我们发起请求,得到相应: 我们 我使用的是requests库,这是一个第三方的库. 2 利用正则解析爬取下的页面 当然你也可以使用xpath和bs4. 我们先看一下网页的源代码: 然后根据代码写出要匹配的正则,然后对匹配出来的数据做解析: 3 将抓到的数据写入本地文件

Python爬虫实战之Requests+正则表达式爬取猫眼电影Top100

import requests from requests.exceptions import RequestException import re import json # from multiprocessing import Pool # 测试了下 这里需要自己添加头部 否则得不到网页 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Ge

爬虫练习 | 爬取猫眼电影Top100

#coding=utf-8 _date_ = '2018/12/9 16:18' import requests import re import json import time def get_one_page(url): headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537

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

流程框架: 抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果. 正则表达式分析:根据HTML代码分析得到电影和名称.主演.上映时间.评分.图片链接等信息. 开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度. 保存至文件:通过文件的形式将内容结果保存,每一部电影一个结果一行Json字符串. 原文地址:https://www.cnblogs.com/779084229yyt/p/9692010.html