Scrapy爬取多层级网页内容的方式
# -*- 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爬取多层级网页内容的方式的更多相关文章
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- Scrapy爬取美女图片第四集 突破反爬虫(上)
本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...
- python scrapy爬取HBS 汉堡南美航运公司柜号信息
下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...
- Python——Scrapy爬取链家网站所有房源信息
用scrapy爬取链家全国以上房源分类的信息: 路径: items.py # -*- coding: utf-8 -*- # Define here the models for your scrap ...
- scrapy爬取cnblogs文章列表
scrapy爬取cnblogs文章 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/cnblogs.py 编写 pipelines.py 编写 settings.py 运行 ...
- 小说免费看!python爬虫框架scrapy 爬取纵横网
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 风,又奈何 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...
- scrapy爬取海量数据并保存在MongoDB和MySQL数据库中
前言 一般我们都会将数据爬取下来保存在临时文件或者控制台直接输出,但对于超大规模数据的快速读写,高并发场景的访问,用数据库管理无疑是不二之选.首先简单描述一下MySQL和MongoDB的区别:MySQ ...
- Scrapy爬取美女图片 (原创)
有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...
随机推荐
- CSS 两边是线 中间是文字的效果
刚开始做的时候 想了一下 这个是怎么做出来的,后来在网上看到有个类似的效果,研究一下 <!DOCTYPE html> <html lang="en"> &l ...
- django_uWSGI+nginx环境
1 uWSGI 作用 Django 默认使用的是 Python 自带的 simple HTTPServer 提供web服务的,在安全性和效率上都是不行的,只能用作django开发测试. WSGI是一个 ...
- morphia(6-1)-查询
1.filter morphia语法: query.filter("price >=", 1000); mongodb语法: { price: { $gte: 1000 } ...
- Redis基础理论
一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会话缓存 分布式锁实现 其它 五.Redis 与 ...
- ZooKeeper理论知识
前言 相信大家对 ZooKeeper 应该不算陌生.但是你真的了解 ZooKeeper 是个什么东西吗?如果别人/面试官让你给他讲讲 ZooKeeper 是个什么东西,你能回答到什么地步呢? 我本人曾 ...
- 一个页面有相同ID元素的情况分析
经常会遇到一个页面中有相同定义相同id的情况,从道理上来说,id应该是这个页面中某个元素的唯一标识,所以不应该出现有相同id的情况,否则会产生意想不到的结果.而且各个浏览器的表现也是不一样的.我只做了 ...
- Java反射 : Declared的作用 ( 例如 : getMethods和getDeclaredMethods )
import com.tangcheng.learning.service.lock.annotation.KeyParam; import lombok.Data; import lombok.Eq ...
- AJPFX关于VIM的常用快捷键
Ajax技术的核心是XMLHttpRequest对象(简称XHR),var xhr = new XMLHttpRequest();function createXHR(){if (typeof XML ...
- jquery最常用的几个方法。——可删除
jquery使用手册:http://www.eduyo.com/doc/jquery/cheatsheet.html $(this).hasClass("input_money") ...
- 访问修饰符(C# 参考)
第一篇 就抄写了一下下MSDN上面的东西练练手吧!!! 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性. 本节介绍四个访问修饰符: public protected ...