scrapy 爬取动态网页失败但不提示出错怎么办

Scrapy研究探索(五)——自动多网页爬取(抓取某人博客所有文章)
首先,在教程(二)()中,研究的是爬取单个网页的方法。在教程(三)()中,讨论了Scrapy核心架构。现在在(二)的基础上,并结合在(三)中提到的爬取多网页的原理方法,进而进行自动多网页爬取方法研究。
并且,为了更好的理解Scrapy核心架构以及数据流,在这里仍采用scrapy.spider.Spider作为编写爬虫的基类。
首先创建project:
items.py编写
在这里为清晰说明,只提取文章名称和文章网址。
pipelines.py编写
其中,构造函数中以可写方式创建并打开存储文件。在process_item中实现对item处理,包含将得到的item写入到json形式的输出文件中。
settings.py编写
对于setting文件,他作为配置文件,主要是至执行对spider的配置。一些容易被改变的配置参数可以放在spider类的编写中,而几乎在爬虫运行过程中不改变的参数在settings.py中进行配置。
这里将COOKIES_ENABLED参数置为True,使根据cookies判断访问的站点不能发现爬虫轨迹,防止被ban。
ITEM_PIPELINES类型为字典,用于设置启动的pipeline,其中key为定义的pipeline类,value为启动顺序,默认0-1000。
爬虫编写始终是重头戏。原理是分析网页得到“下一篇”的链接,并返回Request对象。进而继续爬取下一篇文章,直至没有。
慢慢分析:
(1)download_delay参数设置为1,将下载器下载下一个页面前的等待时间设置为1s,也是防止被ban的策略之一。主要是减轻服务器端负载。
(2)从response中抽取文章链接与文章题目,编码为utf-8。注意yield的使用。
(3)抽取“下一篇”的url,由于抽取后缺少http://blog.csdn.net部分,所以补充。两个print只为调试,无实际意义。重点在于
也就是将新获取的request返回给引擎,实现继续循环。也就实现了“自动下一网页的爬取”。
部分存储数据截图:
原创,转载注明:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Scrapy 爬取页面时 xpath 取到数据不正确,是不是缓存的关系? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
推荐学习书目
Python Sites
值得关注的项目
Python 编程
Sponsored by
国内领先的实时后端云野狗 API 可用于开发即时聊天、网络游戏、实时定位等实时场景传输快!响应快!入门快!
Promoted by
Scrapy 爬取页面时 xpath 取到数据不正确,是不是缓存的关系?
19:01:39 +08:00 · 2217 次点击
使用scrapy抓取appanie数据,有如下问题。 18:47:59+0800 [annie] DEBUG: Crawled (200) &GET ; (referer: None)Feb 3, 2015xpath取的格式如下预期的正确rank_date应该为 Feb 4, 2015这段代码之前跑了几个月都没有什么问题,今天忽然出现的,调整了setting文件设置了 HTTPCACHE_ENABLED = FalseDOWNLOADER_STATS = False但是依然无法返回正常结果 有任何人遇到过这个问题,或者指出问题出在哪里吗?
19 回复 &| &直到
13:25:14 +08:00
& & 19:05:58 +08:00
打开是个404,xpath中的第一个标签就搜不到,跑啥
& & 21:09:05 +08:00
不好意思,上面那个回答太草率了,下班之后我也爬了一下,一开始总是503
20:53:38+0800 [apple] DEBUG: Crawled (200) &GET ; (referer: None)
Feb 4, 2015
后来比对了一下原因基本锁定在了user_agent的上面,一定是还带着scrapy的头就get去了
给你提供了几个普通的浏览器user_agent ,放在settings.py 中。你再试一下吧
#USER_AGENT = 'Mozilla/5.0 (M Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'
& & 22:07:10 +08:00
@ USER_AGENT在settings.py里设置了五个 每次抓取的时候随机选取了其中一个的,然后是使用了proxy抓取的 会是这个的问题吗?
& & 22:59:41 +08:00
@ 可是我刚才抓成功了啊。开始以为是时间间隔的问题,后来发现取消延迟和随机延迟之后,仍然不能抓,只要换user agent了,就可以抓了,都是200,print有,存能存,何况爬虫,东西都拿下来了,怎么会存不了。
帮你抓个大触过来0 0 @
& & 23:25:04 +08:00
你需要把失败时的页面存下来。
& & 10:11:50 +08:00
@ 页面是抓下来了 返回的状态码也是200 但是信息和我直接访问看到的源码是不一致的,日期不对,抓取到的页面显示出来的 rank_date源信息确实是Feb 3, 2015,但是浏览器内查看到的源码是Feb 5, 2015
@ 页面存下来是要查看源信息是吗
10:03:32+0800 [annie] DEBUG: Crawled (200) &GET ; (referer: None)
[u'&div class=&ss-top-chart-filter&&\n
&div class=&filter-item& control-filter=&list-picker& data-name=&device& data-ganame=&Device& data-title=&\u8bbe\u5907& data-icon=&icon-tablet&&&a class=&current&&iPhone&/a&&a class=&more&&&i class=&icon-caret-down&&&/i&&/a&&a class=&title&&&span class=&icon-tablet&&&/span&&span class=&filter-name&&\u8bbe\u5907&/span&&/a&&/div&\n
&div class=&filter-item& control-filter=&tab-picker& data-name=&country& data-ganame=&Country& data-title=&\u56fd\u5bb6& data-icon=&icon-globe&&&a class=&current&&\u4e2d\u56fd&/a&&a class=&more&&&i class=&icon-caret-down&&&/i&&/a&&a class=&title&&&span class=&icon-globe&&&/span&&span class=&filter-name&&\u56fd\u5bb6&/span&&/a&&/div&\n
&div class=&filter-item& control-filter=&menu-picker& data-name=&category& data-ganame=&Category& data-type=&menu& data-title=&\u7c7b\u522b& data-icon=&icon-folder-open-alt&&&a class=&current&&\u6e38\u620f&/a&&a class=&more&&&i class=&icon-caret-down&&&/i&&/a&&a class=&title&&&span class=&icon-folder-open-alt&&&/span&&span class=&filter-name&&\u7c7b\u522b&/span&&/a&&/div&\n
&div class=&filter-item& control-filter=&list-picker& data-name=&iap& data-ganame=&IAP& data-title=&App\ud\u4e70& data-icon=&aaicon-inapppurchase& style=&&&&a class=&current&&\uApp&/a&&a class=&more&&&i class=&icon-caret-down&&&/i&&/a&&a class=&title&&&span class=&aaicon-inapppurchase&&&/span&&span class=&filter-name&&App\ud\u4e70&/span&&/a&&/div&\n
&div class=&filter-item& control-filter=&daily& data-name=&date& data-ganame=&Date& data-title=&\u65e5\u671f& data-icon=&icon-calendar&&&a class=&current&&Feb 3, 2015&/a&&a class=&more&&&i class=&icon-caret-down&&&/i&&/a&&a class=&title&&&span class=&icon-calendar&&&/span&&span class=&filter-name&&\u65e5\u671f&/span&&/a&&/div&\n
这是刚刚我获取的页面,奇怪的就是&a class=&current&&Feb 3, 2015&/a& 为什么还是Feb 3呢
& & 10:29:44 +08:00
确定是使用proxy的问题,解决办法是换proxy。
& & 12:47:49 +08:00
借道问@ pyspider里面的age是什么时候生效的呢?我设置了10天的age后来改成1天,似乎任务还是会被scheduler忽略啊……
& & 12:49:59 +08:00
代理可以试下这个……
连UA都帮你一并搞定了的一站式服务。
& & 12:52:25 +08:00
@ 你是怎么确认 &任务还是会被scheduler忽略& 的,任务的当前状态是什么。修改后有没有尝试重启 pyspider 。
& & 12:54:08 +08:00
我在日志里面看到on_start之后,新进来的任务直接就被ignore了。
我没重启pyspider,这个情况我是应该重启scheduler还是fetcher?或是其他组件?
& & 12:54:36 +08:00
老忘记@ 真头痛
& & 12:58:33 +08:00
@ 先重启 processor 试试,不行 重启 scheduler
& & 12:59:49 +08:00
@ 谢谢。顺便抱怨一下我的PR被Close感觉不会再爱了。T-T
& & 13:04:05 +08:00
@ proxy authorization 吗?你改变行为了,导致 CI 测试不通过。现在 proxy 是默认启用,你没有 merge 这个特性。
& & 13:04:26 +08:00
@ 解决后告诉我你重启了什么。
& & 13:08:37 +08:00
@ 完全不懂CI,只看到我这边跑的很开心的功能它测试不通过。
重启时候手滑不小心 supervisorctl reload 全部重启,然后问题解决了。
& & 13:14:33 +08:00
@ 有留下日志吗?我想看下日志。
& & 13:25:14 +08:00
@ 日志发你邮箱了。
& · & 1089 人在线 & 最高记录 1893 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 61ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40? Do have faith in what you're doing.scrapy在爬取网页信息的问题 - 开源中国社区
当前访客身份:游客 [
当前位置:
本人刚开始玩scrapy爬虫,想要爬取里面的信息进行分析。
但是无法正常获取信息。
在终端可以正常输出 lala1
log.msg("lala1",level=log.DEBUG)
但是无法输出
log.msg("lala",level=log.DEBUG)
response.body可以正常保存到本地。
个人感觉卡在
& & & & sel=Selector(response)
import json
#from scrapy.spiders import Spider
from scrapy.http import Request
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
#from sweetheart.items import *
from scrapy.selector import Selector
from scrapy.spider import Spider
from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.utils.url import urljoin_rfc
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.http import Request
from fuckdamn.items import *
import scrapy
from scrapy import log
class shspider(CrawlSpider):
name = "sweetheartspider"
allowed_domains = [""]
username = ""
password = "hfz7215"
start_urls = "/zh/login.php?previous_url=/member/search.php?default=on&last_login_dt=&sort=created_dt_desc"
def start_requests(self):
return [scrapy.FormRequest(self.start_urls,formdata={'email': self.username,'pass': self.password},callback=self.list_item)]
def list_item(self, response):
with open('%s%s%s' % (os.getcwd(), os.sep, 'logged%d.html' %self.num ), 'wb') as f:
f.write(response.body)
self.num+=1
可以在logged0.html中正常生成response.body里的内容
items = []
log.msg("lala1",level=log.DEBUG)
log.msg("the reponse_URL:%s" % reponse.url,level=log.DEBUG)
sel=Selector(response)
log.msg("the reponse URL:%s" % reponse.url,level=log.DEBUG)
with open("temp.txt",'wb') as f:
f.write(response.selector.xpath("//div[@class='result-list-item__inner']").extract())
result_list=response.selector.xpath("//div[@class='result-list-item__inner']").extract()
result_list=sel.xpath("//li[@class='result-list-item__inner']").extract()
log.msg("lala",level=log.DEBUG)
for result_item in rl:
log.msg("this is the %d item" % num,level=log.DEBUG)
item=Person()
item['name']=result_item.xpath(".//h4[@calss='member-title result-name']").extract()
item['age']=result_item.xpath(".//div[@calss='primary-description truncated-line']").extract()
item['bullet']=result_item.xpath(".//span[@calss='bullet']").extract()
item['fit']=result_item.xpath(".//ul[@calss='unstyled-list']/li[1]").extract()
item['nationnality']=result_item.xpath(".//ul[@calss='unstyled-list']/li[2]").extract()
items.append(item)
yield items
url=sel.xpath("//li[@calss='pagination__next ']/a/@href").extract()
yield Request(url,callback=self.list_item)
共有3个答案
<span class="a_vote_num" id="a_vote_num_
看截图里面,你的response少写了一个s, 成了 reponse
<span class="a_vote_num" id="a_vote_num_
谢谢,问题已经解决,我把sel=Selector(response)改成sel=Selector(text=response.body)。
<span class="a_vote_num" id="a_vote_num_
scrapy没用过,我最近用了神箭手云爬虫框架(/),在线写爬虫比其他框架方便多了~
更多开发者职位上
有什么技术问题吗?
类似的话题使用scrapy爬取sebug漏洞库_FreeBuf-爱微帮
&& &&& 使用scrapy爬取sebug漏洞库
微信号:freebuf由于项目需要抓取sebug的漏洞库内容,就利用scrapy框架简单写了个抓取sebug的爬虫,并存入数据库,mysql或mongodb,这里以mysql为例。关于scrapyScrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。一图胜千言哈:操作步骤1,先建立个scrapy项目,会自动生成一个目录结构Scrapy startproject sebug2,分析下sebug的漏洞详情页面内容,在item.py定义要抓取的数据结构3,sebug的一个URL:http://sebug.net/vuldb/vulnerabilities?start=1 遍历start可以列出所有漏洞的列表。基于CrawkSpider定义一个爬虫类,并添加相应的爬虫规则,然后引入HtmlXPathSelector解析网页,提取所需的页面内容,存入item。爬虫规则分析(1)URL以/vuldb/ssvid-xxx 为后缀的网页,调用回调函数处理页面内容,提取数据 Rule(SgmlLinkExtractor(allow=(&#39;/vuldb/ssvid-(\d{1,6})$&#39;,)),callback=&#39;parse_vul&#39;)(2)URL如/vuldb/vulnerabilities?start=xxx 的自动抓取网页链接供爬虫处理Rule(SgmlLinkExtractor(allow=(&#39;/vuldb/vulnerabilities\?start=(\d{1,2})$&#39;,)),follow=True)4,编写pipelines文件,把item存入mysql。5,在setting.py中添加pipelines:ITEM_PIPELINES = [&#39;sebug.pipelines.SebugPipeline&#39;]为了防止spider被BAN掉,还可以设置访问延迟和user-agent。DOWNLOAD_DELAY = 2RANDOMIZE_DOWNLOAD_DELAY = TrueUSER_AGENT = &#39;Mozilla/5.0 (M Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5&#39;6,在mysql中创建对应的表结构。Create table vulninfo (ssv varchar(10) not null,appdir varchar(20),title varchar(50),content mediumtext,publishdate varchar(50))charset=utf8;7,运行爬虫scrapy crawl sebugvul8,运行截图代码地址:/Hongxs/scrapy-sebug
点击展开全文
悄悄告诉你
更多同类文章
还可知道有多少人阅读过此篇文章哦
微信扫描右侧二维码关注后
可阅读原文和更多同类文章
还可知道有多少人阅读过此篇文章哦
国内关注度最高的全球互联网安全新媒体
您的【关注和订阅】是作者不断前行的动力
本站文章来自网友的提交收录,如需删除可发送邮件到 bang@ 或联系QQ ,
(C)2014&&版权所有&&&|&&&
京ICP备号-2&&&&京公网安备34【求助】scrapy报400错误
[问题点数:100分,结帖人kui27]
【求助】scrapy报400错误
[问题点数:100分,结帖人kui27]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年1月 移动平台大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 scrapy 增量爬取 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信