# -*- 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. SpringBoot | Thymeleaf | 局部更新

    建立一个实体类: public class Fruit { int id; String name; public Fruit() { } public Fruit(int id, String na ...

  2. java排序之冒泡排序

    代码: package com.cn.algorithm_arithmetic算法; /** * 本程序记录了经典排序算法之冒泡排序 * @author Administrator * */ publ ...

  3. 使用CSS 实现菱形图片,斜条纹背景

    比较简单的菱形图片: 效果如下 代码部分: <div class="d1"> <img src="img/5.jpg"> </di ...

  4. 在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)

    同步代码块和同步方法的区别:同步代码块可以传入任意对象,同步方法中 如果多个线程检查的都是一个新的对象,不同的同步锁对不同的线程不具有排他性,不能实现线程同步的效果,这时候线程同步就失效了. 两者的区 ...

  5. hdu4832Chess(dp)

    链接 这题第一想法是矩阵,不过范围太大了,然后就没有思路了.. 之后看到群里的解法,行和列可以分着走,两者是互不影响的,这样就把二维转换成了一维,直接dp求出就可以了. 然后再组合相乘一下. #inc ...

  6. Oracle 恢复数据后,数据库中中文变成问号解决方法

    1.右击---我的电脑---环境变量 2.新增环境变量 变量名:LANG=zh_CN.GBK NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 3.重启PLSQL或 ...

  7. IE如何实现text-shadow文字阴影效果呢?

    让我们头痛的是IE是不支持text-shadow效果,但为了在兼容这一问题,我们只好使用滤镜filter:shadow来处理(本人不提倡使用滤镜).filter:shadow滤镜作用与dropshad ...

  8. Spring-打印机案例

    1.导包 <!--beans--><dependency> <groupId>org.springframework</groupId> <art ...

  9. asp也玩三层架构(有源代码)

    实体类 <% Class UserInfo Private mintId Public Property Let UserId(intUserId) mintId = intUserId End ...

  10. Eclipse优化工具Optimizer for Eclipse

    第一次看到是Optimizer for Eclipse是在InfoQ 然后使用了一下,发现不错啊,我的好几年的破本都能比较快的启动Eclipse了 好了,废话不说了,来介绍一下Optimizer fo ...