python爬取js异步加载图片_python-scrapy框架爬取某瓣电视剧信息--异步加载页面

前期准备,首先要有python环境+scrapy环境+pycharm环境

一、建立爬虫所需的环境,在命令行输入:

scrapy startproject doubantv  #命名自定义就好

会生成一个名为doubantv的文件夹,cd进入doubantv文件夹,在进入spiders文件夹,执行命令,新建爬虫文件:

scrapy gensipder tv "https://movie.douban.com"  #注明爬虫文件名,要爬取的网址域

然后就可以用pycharm打开doubantv文件了。

二、编写爬虫文件

https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E8%A7%86%E5%89%A7&start=0#爬取的网址

我们会发现这个页面是通过ajax异步加载来不断获取页面的,通过我们细心的观察不难发现,每次加载页面都会出现一个有规律的网址,也就是上面给出的这个网址。因此我们就可以非常轻松的获取完整的页面信息了。

首先添加想要爬取的字段信息。

由于我们只是个人学习测试使用,所以就随机选择几个字段进行爬取:

在iteam文件编写

import scrapyclassDoubantvItem(scrapy.Item):

# define the fieldsforyour item here like:

# name=scrapy.Field()

# 导演

directors=scrapy.Field()

# 评分

rate=scrapy.Field()

# 标题

title=scrapy.Field()

# 跟进连接

url=scrapy.Field()

# 图片

cover= scrapy.Field()

然后就是编写spiders内的爬虫文件了:

编写tv.py

#-*- coding: utf-8 -*-import json

import scrapyfromdoubantv.items import DoubantvItemclassTvSpider(scrapy.Spider):

name= 'tv'allowed_domains= ['movie.douban.com']  #爬取域

offset= 0url= 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E8%A7%86%E5%89%A7&start='  #爬取的链接#格式化的url,注意逗号不要少

start_urls=(

url+str(offset),

)

#主函数

def parse(self, response):

#将相应问价转换成json形式

datas= json.loads(response.text)["data"]

#遍历数组获取内容for data indatas:

item=DoubantvItem()

# 导演

item['directors'] = data['directors']

# 评分

item['rate'] = data['rate']

# 标题

item['title'] = data['title']

# 跟进连接

item['url'] = data['url']

# 图片

item['cover'] = data['cover']

#传送到管道文件yielditem

#获取封面图片urlfor data indatas:

# 图片

image= data['cover']

#传送到管道文件yield scrapy.Request(image, callback=self.parse)

#自定义爬取响应地址数,我这里随意设置了一个20000if self.offset < 20000:

self.offset+= 20

#每次调用函数回滚,重复递归执行

yield scrapy.Request(self.url + str(self.offset), callback=self.parse)

接下来我们编写管道文件:

编写pipelines文件

import os

import urllibfromurllib.request import urlretrieveclass DoubantvPipeline(object):

#初始化响应文件,建立一个doubantv.txt文件,和一个用户存放图片的目录

def __init__(self):

self.filename= open("doubantv.txt", "wb")

self.path= "G:\images\p"self.page= 0

#没有就新建一个

ifnot os.path.exists(self.path):

os.mkdir(self.path)

#保存文件信息的函数

def process_item(self, item, spider):

print("------------------------------------------------------")

directors= item["directors"]

rate= item["rate"]

title= item["title"]

url= item["url"]

cover= item["cover"]

print("---------------------------------------------------")

#这里我们随机保存了一个内容

self.filename.write(title.encode('utf-8') + ' '.encode('utf-8') + rate.encode('utf-8') + '\r'.encode('utf-8'))

#保存图片文件到预定的目录

src= item['cover']pathname= os.path.join(self.path, str(self.page) + cover + '.jpg')try:

res=urllib.request.urlopen(src) #下载图片文件

with open(pathname,'wb') asf:

f.write(res.read())

self.page+= 1except Exceptionase:

print(e)returnitem

#关闭文件,释放内存

def colse_spider(self, spider):

self.filename.close()

然后执行爬虫文件:

在跟目录下执行

scrapy crawl tv

耐性等待片刻后。。。

去他*的世界 第二季 9.2致命女人 第一季9.3去他*的世界 第一季 9.1摩登情爱 第一季8.7鹤唳华亭7.4从前有座灵剑山7.4美国恐怖故事:1984 第九季 7.4谍战深海之惊蛰6.5请回答19889.7

。。。。。。。。。

OVER

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值