# -*- coding: utf-8 -*-
import scrapy
from Avv.items import AvvItem class AvSpider(scrapy.Spider):
name = 'av' # 爬虫名
allowed_domains = ['51porn.net/'] # 爬虫作用域 # 爬取第2页到最后一页的代码
url = 'http://www.51porn.net/nvyoudaquan/index_{}.html' # 起始url,并用花括号格式化
offset = 2 # 偏移量
start_urls = [url.format(str(offset))] # 拼接为完整url def parse(self, response): # 第一个parse,从中提取下一层url
     # 第一部分
links = response.xpath("//ul[@class='clearfix']/li/a/@href").extract() # 利用xpath提取下一层的url列表,并用extract转换为字符串
for link in links: # 遍历上个列表
url = "http://www.51porn.net" + link # 由于提取出来的url不完整,所以需要拼接为完整的url
yield scrapy.Request(url,callback=self.parse_s,dont_filter=True) # 请求下一层url,方法为第二个parse,dont_filter=True的作用是避免有时候新的url会被作用域过滤掉     # 第二部分
m_page = 26 # 这里设置的是第一层的url有多少页
if self.offset<m_page: # 如果当前页小于最大页
self.offset += 1 # 偏移量自增1
yield scrapy.Request(self.url.format(str(self.offset)),callback=self.parse,dont_filter=True) # 再此请求第一层的新的url def parse_s(self, response):
link = response.xpath("//div[@class='wrap loadimg avlist-small']/ul/li[1]/a/@href").extract()[0] # 提取第2层url
url = "http://www.51porn.net" + link # 拼接为新的url
yield scrapy.Request(url,callback=self.parse_t,dont_filter=True) # 请求第3个parse def parse_t(self, response):
links = response.xpath("//ul[@class='alllist clearfix']/li/a/@href").extract() # 提取第3层url
for link in links:
url = "http://www.51porn.net" + link # 拼接为新的url yield scrapy.Request(url,callback=self.parse_last,dont_filter=True) # 请求最后的parse def parse_last(self, response):
item = AvvItem() # 实例一个引入的字典类对象
node_list = response.xpath("//div[@class='content loadimg wow fadeInUp']")
for node in node_list:
# 提取以下具体信息
item["m_num"] = node.xpath("./p[1]/text()").extract()[0]
item["m_name"] = node.xpath("./p[2]/text()").extract()[0]
item["s_name"] = node.xpath("./p[3]/a/text()").extract()[0]
item["i_date"] = node.xpath("./p[4]/text()").extract()[0]
item["l_work"] = node.xpath("./p[5]/text()").extract()[0]
item["m_style"] = node.xpath("./p[7]/text()").extract()[0] if len(node.xpath("./p[7]/text()"))>0 else "无" # 判断此信息是否为空值
item["c_work"] = node.xpath("./p[8]/img/@src").extract()[0] yield item # 返回

Scrapy爬取多层级网页内容的方式的更多相关文章

  1. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  2. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  3. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...

  4. python scrapy爬取HBS 汉堡南美航运公司柜号信息

    下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...

  5. Python——Scrapy爬取链家网站所有房源信息

    用scrapy爬取链家全国以上房源分类的信息: 路径: items.py # -*- coding: utf-8 -*- # Define here the models for your scrap ...

  6. scrapy爬取cnblogs文章列表

    scrapy爬取cnblogs文章 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/cnblogs.py 编写 pipelines.py 编写 settings.py 运行 ...

  7. 小说免费看!python爬虫框架scrapy 爬取纵横网

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  8. scrapy爬取海量数据并保存在MongoDB和MySQL数据库中

    前言 一般我们都会将数据爬取下来保存在临时文件或者控制台直接输出,但对于超大规模数据的快速读写,高并发场景的访问,用数据库管理无疑是不二之选.首先简单描述一下MySQL和MongoDB的区别:MySQ ...

  9. Scrapy爬取美女图片 (原创)

    有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...

随机推荐

  1. select查询---sql

    SELECT 语句用于从数据库中选取数据. SQL SELECT 语句 SELECT 语句用于从数据库中选取数据. 结果被存储在一个结果表中,称为结果集. SQL SELECT 语法 SELECT c ...

  2. POJ-325Corn Fields

    链接:https://vjudge.net/problem/POJ-3254#author=freeloop 题意: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ ...

  3. 网络流--Dinic(自用,勿看)

    注意:这是一篇个人学习笔记,如果有人因为某些原因点了进来并且要看一下,请一定谨慎地阅读,因为可能存在各种奇怪的错误,如果有人发现错误请指出谢谢! https://www.luogu.org/probl ...

  4. Influxdb 时序数据库 windows 安装

    Influxdb 是一款比较火爆的时序数据库,本文介绍如何在 windows 平台下安装. 1.场景: windows 平台的 influxdb 似乎只支持单机非windows 服务的安装方式 适用于 ...

  5. struts2的@Result annotation 如何添加params,并且在页面取值

    http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai  ...

  6. python学习之j进程和线程:

    每个进程至少有一个线程,python因为每个线程都共用一个GIL全局锁(同时只能运行一个线程),所以不能用多线程(除非重新写C解释器),但是多进程的GIL锁各自独立可多进程. 进程与线程的区别在于一个 ...

  7. POJ 1830 开关问题 高斯消元,自由变量个数

    http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...

  8. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)

    在工作中,我也逐渐了解到pack,unpack,ord对于二进制字节处理的强大. 下面我逐一介绍它们.在我们工作中,用到它们的估计不多. 我在最近一个工作中,因为通讯需要用到二进制流,然后接口用php ...

  9. 实现如下语法的功能:var a = add(2)(3)(4)

    function add(num){ var _add = function(args){ num+=args; return arguments.callee; } _add.toString = ...

  10. 7.html超链接的使用

    <html> <head> <title>第七课网页标签</title> <meta charset="utf-8"> ...