静觅爬虫学习笔记8-爬取猫眼电影

  不知道是不是我学习太晚的原因,猫眼电影这网站我用requests进行爬取源码直接返回给我一个您的访问被禁止。作为萌新的我登时就傻了,还好认真听了之前的课,直接换selenium抓了源码,虽然效率惨不忍睹,但多少也能运行了,下面上代码

import json
import requests
import re
from requests.exceptions import RequestException
from multiprocessing import Pool
from selenium import webdriver

def get_one_page(url):                  # 获取网页源码
    browser = webdriver.Chrome()
    try:
        browser.get(url)
        return browser.page_source
    finally:
        browser.close()

def  parse_one_page(html):                 # 利用正则表达式提取内容
    pattern = re.compile(‘<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a‘
                        +‘.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>‘
                        +‘.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>‘,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]
        }

def write_to_file(content):                 # 写入文件
    with open(‘result.txt‘,‘a‘,encoding=‘utf-8‘) as f:
        f.write(json.dumps(content,ensure_ascii=False) + ‘\n‘)
        f.close()

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)
        write_to_file(item)

if __name__ == ‘__main__‘:
    for i in range(10):
        main(i*10)
    #多线程写法,实测不是很好用,因为同时打开多个网页,抓取结果容易乱序
    """
    pool = Pool()
    pool.map(main,[i*10 for i in range(10)])
    """

多线程那块这写法不太好用....

而且有的时候爬取的数据不足100个,会漏掉1到2个,而且每次漏掉的还是不同的数据,萌新求教这是为何

时间: 2024-10-14 22:01:53

静觅爬虫学习笔记8-爬取猫眼电影的相关文章

# [爬虫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()用于选择子节点,因此限定了选择的区域,速度可能要快些,直接传入''选择器可能

静觅爬虫学习笔记2-urllib库的基本使用

1.什么是Urllib 它是Python内置的Http请求库 urllib.request   请求模块 urllib.error       异常处理模块 urllib.parse      url解析模块 urllib.robotparser robots.txt解析模块 2.urlopen 帮助我们发送request请求 第一个参数为网站的url,第2个参数是一些额外i的数据,例如post的数据,第3个是超时的设置,其他自行百度 举个简单的例子: 3.响应 响应只要注意响应类型,状态码和响

Python使用asyncio+aiohttp异步爬取猫眼电影专业版

asyncio是从pytohn3.4开始添加到标准库中的一个强大的异步并发库,可以很好地解决python中高并发的问题,入门学习可以参考官方文档 并发访问能极大的提高爬虫的性能,但是requests访问网页是阻塞的,无法并发,所以我们需要一个更牛逼的库 aiohttp ,它的用法与requests相似,可以看成是异步版的requests,下面通过实战爬取猫眼电影专业版来熟悉它们的使用: 1. 分析 分析网页源代码发现猫眼专业版是一个动态网页,其中的数据都是后台传送的,打开F12调试工具,再刷新网

使用xpath爬取猫眼电影排行榜

最近在学习xpath,在网上找资料的时候,发现一个新手经常拿来练手的项目,爬取猫眼电影前一百名排行的信息,很多都是跟崔庆才的很雷同,基本照抄.这里就用xpath自己写了一个程序,同样也是爬取猫眼电影,获取的信息是一样的,这里提供一个另外的解法. 说实话,对于网页信息的匹配,还是推荐用xpath,虽然正则确实也能达到效果,但是语句过于繁琐,一不注意就匹配不出东西,特别对于新手,本身就不熟悉正则表达式,错了都找不出来,容易劝退.正则我一般用于在处理文件,简直神器. 下面贴代码. import req

scrapy爬取猫眼电影排行榜

做爬虫的人,一定离不开的一个框架就是scrapy框架,写小项目的时候可以用requests模块就能得到结果,但是当爬取的数据量大的时候,就一定要用到框架. 下面先练练手,用scrapy写一个爬取猫眼电影的程序,环境配置和scrapy安装略过 第一步肯定是终端运行创建爬虫项目和文件 1 # 创建爬虫项目 2 scrapy startproject Maoyan 3 cd Maoyan 4 # 创建爬虫文件 5 scrapy genspider maoyan maoyan.com 然后在产生的ite

爬取猫眼电影

爬去猫眼电影正字热映电影榜单的前五页: #爬取猫眼电影正在热映前5面的所有电影 import requests from requests import RequestException import re def get_one_page(url): header ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.8

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'

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

'''Requests+正则表达式爬取猫眼电影TOP100''''''流程框架:抓去单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果.正则表达式分析:根据HTML代码分析得到电影的名称.主演.上映时间.评分.图片链接等信息.保存至文件:通过文件的形式保存结果,每一部电影一个结果一行Json字符串.开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度.'''import requestsimport refrom requests.exceptions impor

正则表达式爬取猫眼电影

正则表达式爬取猫眼电影Top100 import requests import re,json from multiprocessing import Pool def get_one_page(url): response = requests.get(url) return response.text def parse_one_page(html): pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?dat