scrapy爬虫只能爬取第一页中的链接

euangelion 2015-05-09 11:52:58
现在只能爬取第一页中的链接和第一页链接中的链接,也就是说现在页码显示1-5,则只能爬前5页的数据,即使到了第5页的时候里面有第6-9的页码,也不进行爬取,我的理解是爬虫没有对爬取回来的链接进一步爬取,但是不能理解是为什么……我也没有设置爬取深度,搞了好久都不明白,代码如下,求大神解救orz
class TestSpider(CrawlSpider):
name = 'testSpider'
num = 0
allow_domain = ['http://wz.sun0769.com/']
start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4']
rules = {
Rule(LxmlLinkExtractor(allow='page')),
Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
Rule(LxmlLinkExtractor(allow='/html/question/\d+/\d+\.shtml$'), callback='parse_content')
}
_x_query = {
'title': '''//div[contains(@class, 'pagecenter p3')]/div/div/div[contains(@class,'cleft')]/strong/text()''',
'content': '''//div[contains(@class, 'c1 text14_2')]/text()''',
'content_first': '''//div[contains(@class, 'contentext')]/text()'''
}

def parse_content(self, response):
bbs_item_loader = ItemLoader(item=TutorialItem(), response=response)
content = response.xpath(self._x_query['content_first']).extract()
if len(content) == 0:
content = str(response.xpath(self._x_query['content']).extract()[0].encode('utf-8'))
else:
content = str(content[0].encode('utf-8'))
title = str(response.xpath(self._x_query['title']).extract()[0].encode('utf-8'))
title_list = title.split(' ')
number = title_list[-1]
number = number.split(':')[-1]
url = str(response.url)
bbs_item_loader.add_value('url', url)
bbs_item_loader.add_value('number', number)
bbs_item_loader.add_value('title', title)
bbs_item_loader.add_value('content', content)
# bbs_item_loader.add_xpath('content', self._x_query['content'])

return bbs_item_loader.load_item()
...全文
859 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_28147505 2016-09-05
  • 打赏
  • 举报
回复
请问LxmlLinkExtractor process_value参数怎么使用? 我要对下一页的链接进行拼凑
euangelion 2015-06-30
  • 打赏
  • 举报
回复
引用 5 楼 panghuhu250 的回复:
[quote=引用 3 楼 euangelion 的回复:] [quote=引用 1 楼 panghuhu250 的回复:]

Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
这个应该是用来获取页面链接的. 正则表达式中的$应去掉.
不好意思过了好久才看到回答。。不过不太懂为什么要去掉?因为$不是代表结束么?[/quote] $表示匹配文本的行末,不是表示你要匹配的部分的末尾。例如你给的链接源码中有:

...href="http://wz.sun0769.com/html/question/201506/279788.shtml" title=...
"http://wz.sun0769.com/html/question/201506/279788.shtml"是你要的部分, 但它不在html源码的行尾,后面还有title等字符。加了$后这个链接就匹配不出来。 ---------------------------------------------------------- 说错误, 说真正错误, 拷错误信息说真正错误, 贴代码, 贴完整代码, 用语法高亮贴完整代码. [/quote] 原来是这样的啊……太谢谢了
panghuhu250 2015-06-29
  • 打赏
  • 举报
回复
引用 3 楼 euangelion 的回复:
[quote=引用 1 楼 panghuhu250 的回复:]

Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
这个应该是用来获取页面链接的. 正则表达式中的$应去掉.
不好意思过了好久才看到回答。。不过不太懂为什么要去掉?因为$不是代表结束么?[/quote] $表示匹配文本的行末,不是表示你要匹配的部分的末尾。例如你给的链接源码中有:

...href="http://wz.sun0769.com/html/question/201506/279788.shtml" title=...
"http://wz.sun0769.com/html/question/201506/279788.shtml"是你要的部分, 但它不在html源码的行尾,后面还有title等字符。加了$后这个链接就匹配不出来。 ---------------------------------------------------------- 说错误, 说真正错误, 拷错误信息说真正错误, 贴代码, 贴完整代码, 用语法高亮贴完整代码.
silent喵 2015-06-29
  • 打赏
  • 举报
回复
引用 3 楼 euangelion 的回复:
[quote=引用 1 楼 panghuhu250 的回复:]

Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
这个应该是用来获取页面链接的. 正则表达式中的$应去掉.
不好意思过了好久才看到回答。。不过不太懂为什么要去掉?因为$不是代表结束么?[/quote] 去掉后还是抓不到吧??
euangelion 2015-06-29
  • 打赏
  • 举报
回复
引用 1 楼 panghuhu250 的回复:

Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
这个应该是用来获取页面链接的. 正则表达式中的$应去掉.
不好意思过了好久才看到回答。。不过不太懂为什么要去掉?因为$不是代表结束么?
jmyz_0455 2015-05-14
  • 打赏
  • 举报
回复
同上,你用别人的代码前应该先理解别人的思路原理
panghuhu250 2015-05-12
  • 打赏
  • 举报
回复

Rule(LxmlLinkExtractor(allow='/index\.php/question/questionType\?type=4$')),
这个应该是用来获取页面链接的. 正则表达式中的$应去掉.

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧