scrapy递归抓取网页数据
scrapy spider的parse方法能够返回两种值:BaseItem。或者Request。通过Request能够实现递归抓取。
假设要抓取的数据在当前页,能够直接解析返回item(代码中带**凝视的行直接改为yield item);
假设要抓取的数据在当前页指向的页面,则返回Request并指定parse_item作为callback。
假设要抓取的数据当前页有一部分,指向的页面有一部分(比方博客或论坛,当前页有标题、摘要和url,详情页面有完整内容)这样的情况须要用Request的meta參数把当前页面解析到的数据传到parse_item,后者继续解析item剩下的数据。
要抓完当前页再抓其他页面(比方下一页),能够返回Request,callback为parse。
有点奇怪的是:parse不能返回item列表,但作为callback的parse_item却能够。不知道为啥。
另外。直接extract()得到的文字不包括<a>等子标签的内容。可改为d.xpath('node()').extract()。得到的是包括html的文本。再过滤掉标签就是纯文本了。
没找到直接得到html的方法。
from scrapy.spider import Spider
from scrapy.selector import Selector from dirbot.items import Article import json
import re
import string
from scrapy.http import Request class YouyousuiyueSpider(Spider):
name = "youyousuiyue2"
allowed_domains = ["youyousuiyue.sinaapp.com"] start_urls = [
'http://youyousuiyue.sinaapp.com',
] def load_item(self, d):
item = Article()
title = d.xpath('header/h1/a')
item['title'] = title.xpath('text()').extract()
print item['title'][0]
item['url'] = title.xpath('@href').extract()
return item def parse_item(self, response):
item = response.meta['item'] sel = Selector(response)
d = sel.xpath('//div[@class="entry-content"]/div')
item['content'] = d.xpath('text()').extract()
return item def parse(self, response):
"""
The lines below is a spider contract. For more info see:
http://doc.scrapy.org/en/latest/topics/contracts.html @url http://youyousuiyue.sinaapp.com
@scrapes name
""" print 'parsing ', response.url
sel = Selector(response)
articles = sel.xpath('//div[@id="content"]/article')
for d in articles:
item = self.load_item(d)
yield Request(item['url'][0], meta={'item':item}, callback=self.parse_item) # ** or yield item sel = Selector(response)
link = sel.xpath('//div[@class="nav-previous"]/a/@href').extract()[0]
if link[-1] == '4':
return
else:
print 'yielding ', link
yield Request(link, callback=self.parse)
具体代码见:https://github.com/junglezax/dirbot
參考:
scrapy递归抓取网页数据的更多相关文章
- java抓取网页数据,登录之后抓取数据。
最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...
- Asp.net 使用正则和网络编程抓取网页数据(有用)
Asp.net 使用正则和网络编程抓取网页数据(有用) Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </su ...
- 使用HtmlAgilityPack批量抓取网页数据
原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页 Htm ...
- web scraper 抓取网页数据的几个常见问题
如果你想抓取数据,又懒得写代码了,可以试试 web scraper 抓取数据. 相关文章: 最简单的数据抓取教程,人人都用得上 web scraper 进阶教程,人人都用得上 如果你在使用 web s ...
- c#抓取网页数据
写了一个简单的抓取网页数据的小例子,代码如下: //根据Url地址得到网页的html源码 private string GetWebContent(string Url) { string strRe ...
- 使用JAVA抓取网页数据
一.使用 HttpClient 抓取网页数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...
- 【iOS】正則表達式抓取网页数据制作小词典
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xn4545945/article/details/37684127 应用程序不一定要自己去提供数据. ...
- 01 UIPath抓取网页数据并导出Excel(非Table表单)
上次转载了一篇<UIPath抓取网页数据并导出Excel>的文章,因为那个导出的是table标签中的数据,所以相对比较简单.现实的网页中,有许多不是通过table标签展示的,那又该如何处理 ...
- Node.js的学习--使用cheerio抓取网页数据
打算要写一个公开课网站,缺少数据,就决定去网易公开课去抓取一些数据. 前一阵子看过一段时间的Node.js,而且Node.js也比较适合做这个事情,就打算用Node.js去抓取数据. 关键是抓取到网页 ...
随机推荐
- Maven构建多模块项目
使用Maven构建多模块项目 转自:http://www.cnblogs.com/xdp-gacl/p/4242221.html 在平时的Javaweb项目 开发中为了便于后期的维护,我们一般会进行分 ...
- Jury Compromise(poj 1015)
描述在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是: 控方和辩方会根据对候选 ...
- 【HDOJ5559】Frog and String(构造)
题意:给定n,m,k,要求构造出一个长度为n,最多使用前k个大写字母,有m个不同回文子串的字符串 1<=n,m<=1e5,1<=k<=26 思路:打表找规律 本质上是要找到不让 ...
- Ajax 控件 的使用 以及js调用后台方法【自己总结一下】
原文发布时间为:2009-05-16 -- 来源于本人的百度文章 [由搬家工具导入] 源码:http://download.csdn.net/source/1340120 (js调用后台方法只在源 ...
- validate插件使用
validate插件使用 官网:http://jqueryvalidation.org/ 项目实操 引入文件 add.html调用(注意顺序问题) 为form表单定义一个ID,以方便获取该元素 添加验 ...
- 对CSDN的理性吐槽
CSDN博客网站首页挂了....从使用CSDN博客以来,大大小小的故障出过十几次.........再这样的话我都要对这个网站失去信心了
- Python包管理工具pip的基本使用
1.简介 pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包,可以替代 easy_install 工具. 2.pip安装 如果你安装的Python 2 >=2.7.9 或 ...
- Elasticsearch本地环境安装和常用操作
本篇文章首发于我的头条号Elasticsearch本地环境安装和常用操作,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干 ...
- 2016集训测试赛(十八)Problem C: 集串雷 既分数规划学习笔记
Solution 分数规划经典题. 话说我怎么老是忘记分数规划怎么做呀... 所以这里就大概写一下分数规划咯: 分数规划解决的是这样一类问题: 有\(a_1, a_2 ... a_n\)和\(b_1, ...
- 转:Java多线程学习(总结很详细!!!)
Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...