知识点
- scrapy 分页爬取。
- scrapy提取页面元素之xpath表达式语法
- scrapy 配合pymysql保存爬取到的数据到mysql数据库
- scrapy.Request(……)向回调方法传递额外数据
- 数据库存储前先查重
本文为前文:Python scrapy使用入门,爬取拉勾网上万条职位信息 基础之上的拓展实战,没有看过前文的可以先去看看。对于之前说过的步骤不再赘述。本篇只做举一反三的一次实践,代码抄下来运行成功并没有意义,我们要善于掌握核心技术,为己所用,正好,我选择了一个电影下载站,很适合我练习,于是,在上一篇的代码基础上进行修改。
second.py文件修改后如下:
# -*- coding: utf-8 -*-
import scrapy
from First.items import FirstItem
class SecondSpider(scrapy.Spider):
name = 'second'
allowed_domains = []
start_urls = ['http://www.66ys.tv/']
def parse(self, response):
for item in response.xpath('//div[@class="menutv"]/ul/li/a'):
movClass = item.xpath('text()').extract()
movUrl = item.xpath("@href").extract_first()
oneItem = FirstItem()
oneItem["movClass"] =movClass
oneItem["movUrl"] = movUrl
for i in range(150):
mvUrl2 = movUrl+str('index_%s.html'%i)
try:
yield scrapy.Request(url=mvUrl2,
callback=lambda response, mvclass=movClass: self.parse_url(response, mvclass))
except:
pass
# yield scrapy.Request(url=movUrl,callback=lambda response,mvclass=movClass: self.parse_url(response,mvclass))
def parse_url(self, response,mvclass):
for sel2 in response.xpath('//div[@class="listBox"]/ul/li'):
imgurl = sel2.xpath("div/a/img/@src").extract() # 电影海报链接
mvname = sel2.xpath('div/h3/a/text()').extract()#电影名字
mvurl = sel2.xpath("div/h3/a/@href").extract_first()#电影链接
yield scrapy.Request(url=mvurl, callback=lambda response,mvsclass =mvclass,img = imgurl,name = mvname: self.parse_mor(response, mvclass,img,name))