+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(17421)

2019-09(27243)

Scrapy:'str'对象没有属性'iter'

发布于2019-09-11 19:45     阅读(308)     评论(0)     点赞(18)     收藏(5)


restrict_xpaths为我的scrapy蜘蛛添加了规则,现在它立即失败了:

2015-03-16 15:46:53+0000 [tsr] ERROR: Spider error processing <GET http://www.thestudentroom.co.uk/forumdisplay.php?f=143>
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/base.py", line 800, in runUntilCurrent
        call.func(*call.args, **call.kw)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/task.py", line 602, in _tick
        taskObj._oneWorkUnit()
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/task.py", line 479, in _oneWorkUnit
        result = self._iterator.next()
      File "/Library/Python/2.7/site-packages/scrapy/utils/defer.py", line 57, in <genexpr>
        work = (callable(elem, *args, **named) for elem in iterable)
    --- <exception caught here> ---
      File "/Library/Python/2.7/site-packages/scrapy/utils/defer.py", line 96, in iter_errback
        yield next(it)
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spidermiddleware/offsite.py", line 26, in process_spider_output
        for x in result:
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spidermiddleware/referer.py", line 22, in <genexpr>
        return (_set_referer(r) for r in result or ())
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spidermiddleware/urllength.py", line 33, in <genexpr>
        return (r for r in result or () if _filter(r))
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spidermiddleware/depth.py", line 50, in <genexpr>
        return (r for r in result or () if _filter(r))
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spiders/crawl.py", line 73, in _parse_response
        for request_or_item in self._requests_to_follow(response):
      File "/Library/Python/2.7/site-packages/scrapy/contrib/spiders/crawl.py", line 52, in _requests_to_follow
        links = [l for l in rule.link_extractor.extract_links(response) if l not in seen]
      File "/Library/Python/2.7/site-packages/scrapy/contrib/linkextractors/lxmlhtml.py", line 107, in extract_links
        links = self._extract_links(doc, response.url, response.encoding, base_url)
      File "/Library/Python/2.7/site-packages/scrapy/linkextractor.py", line 94, in _extract_links
        return self.link_extractor._extract_links(*args, **kwargs)
      File "/Library/Python/2.7/site-packages/scrapy/contrib/linkextractors/lxmlhtml.py", line 50, in _extract_links
        for el, attr, attr_val in self._iter_links(selector._root):
      **File "/Library/Python/2.7/site-packages/scrapy/contrib/linkextractors/lxmlhtml.py", line 38, in _iter_links
        for el in document.iter(etree.Element):
    exceptions.AttributeError: 'str' object has no attribute 'iter'**

我无法理解为什么会发生这种错误。

这是我的简短说明Spider

import scrapy

from tutorial.items import DmozItem
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor

class TsrSpider(CrawlSpider):
    name = 'tsr'
    allowed_domains = ['thestudentroom.co.uk']
    start_urls = ['http://www.thestudentroom.co.uk/forumdisplay.php?f=143']

    download_delay = 4
    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0'

    rules = (
        Rule(
            LinkExtractor(
                allow=('forumdisplay\.php\?f=143\&page=\d',),
                restrict_xpaths=("//li[@class='pager-page_numbers']/a/@href",))),

        Rule(
            LinkExtractor(
                allow=('showthread\.php\?t=\d+\&page=\d+',),
                restrict_xpaths=("//li[@class='pager-page_numbers']/a/@href",)), 
            callback='parse_link'),

        Rule(
            LinkExtractor(
                allow=('showthread\.php\?t=\d+',),
                restrict_xpaths=("//tr[@class='thread  unread    ']",)),
            callback='parse_link'),
        )

    def parse_link(self, response):
#           Iterate over posts.     
        for sel in response.xpath("//li[@class='post threadpost old   ']"):
            rating = sel.xpath(
            "div[@class='post-footer']//span[@class='score']/text()").extract()
            if not rating:
                rating = 0
            else:
                rating = rating[0]
            item = DmozItem()
            item['post'] = sel.xpath(
    "div[@class='post-content']/blockquote[@class='postcontent restore']/text()").extract()
            item['link'] = response.url
            item['topic'] = response.xpath(
    "//div[@class='forum-header section-header']/h1/span/text()").extract()
            item['rating'] = rating
            yield item

来源http//pastebin.com/YXdWvPgX

有人可以帮我吗?哪里出错了?我一直在寻找几天!?


解决方案


问题是restrict_xpaths应该指向元素 - 直接链接或包含链接的容器,而不是属性:

rules = [
    Rule(LinkExtractor(allow='forumdisplay\.php\?f=143\&page=\d',
                       restrict_xpaths="//li[@class='pager-page_numbers']/a")),

    Rule(LinkExtractor(allow='showthread\.php\?t=\d+\&page=\d+',
                       restrict_xpaths="//li[@class='pager-page_numbers']/a"),
         callback='parse_link'),

    Rule(LinkExtractor(allow='showthread\.php\?t=\d+',
                       restrict_xpaths="//tr[@class='thread  unread    ']"),
         callback='parse_link'),
]

经过测试(为我工作)。

仅供参考,Scrapy定义restrict_xpaths为“指向区域的表达”:

restrict_xpaths(str或list) - 是一个XPath(或XPath列表),用于定义响应中应从中提取链接的区域如果给定,则仅扫描由这些XPath选择的文本以获取链接。见下面的例子。



所属网站分类: 技术文章 > python文章

作者:黑洞官方问答小能手

链接: http://www.pythonheidong.com/blog/article/108056/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  Python面向对象编程指南 : Mastering Object-oriented Python pdf下载

  Think Python : How to Think Like a Computer Scientist pdf下载

  Python Algorithms : Mastering Basic Algorithms in the Python Language pdf下载

  Learn Python the Hard Way : A Very Simple Introduction to the Terrifyingly Beautiful World o pdf下载

  what's the python之可迭代对象、迭代器与生成器(附面试题)

  Python之异常体系try、except、finally、else介绍(屌丝版)

  tensorflow遇到ImportError: Could not find 'cudart64_100.dll'错误解决

  模块之 time datetime random json pickle os sys hashlib collections

  Caused by SSLError("Can’t connect to HTTPS URL because the SSL module is not available)

  python pandas包数据定位([] & index & loc & iloc & where & query)

优质资源排行榜

 python经典电子书大合集下载 下载次数 8104

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7543

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7438

 零基础大数据全套视频400G 下载次数 7001

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6891

 零基础软件测试全套系统教程 下载次数 6501

 全套人工智能视频+pdf 下载次数 6436

 IOS全套视频教程 基础班+就业班 下载次数 4679

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3076

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3047

11  Python深度学习 pdf下载 下载次数 3035

12  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 2998

13  python项目开发视频 下载次数 2996

14  python从入门到精通视频(全60集)python视频教程下载 下载次数 2993

15  黑马2017年java就业班全套视频教程 下载次数 2992

16  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

17  利用python实现程序内存监控脚本 下载次数 2986

18  老男孩python自动化视频 下载次数 2979

19  树莓派Python编程指南 pdf下载 下载次数 2976

20  尚硅谷Go学科全套视频 下载次数 2972

21  老王python基础+进阶+项目视频教程 下载次数 2971

22  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2966

23  Web前端实战精品课程 下载次数 2966

24  Python基础教程 pdf下载 下载次数 2962

25  tron python小游戏 下载次数 2962

26  [小甲鱼]零基础入门学习Python 下载次数 2959

27  老男孩python全栈开发15期 下载次数 2958

28  2017最新web前端开发完整视频教程附源码 下载次数 2948

29  最新全套完整JAVAWEB2018开发视频 下载次数 2926

30  Python算法教程_中文版 pdf下载 下载次数 2910

31  Spring boot实战视频6套下载 下载次数 2909

32  python全套视频十五期(116G) 下载次数 2901

33  Python项目实战 下载次数 2882

34  python全自动抢火车票教程-python视频教程下载 下载次数 2882

35  30个小时搞定Python网络爬虫 含源码 下载次数 2881

36  尚硅谷大数据之Hadoop视频 下载次数 2876

37  简明python教程 (A Byte of Python)pdf下载 下载次数 2870

38  Python A~B~C~ python视频教程下载 下载次数 2864

39  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2863

40  web小程序表白天数倒计时源码下载 下载次数 2862

41  python基础视频教程 下载次数 2862

42  Python高性能编程 pdf下载 下载次数 2858

43  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 2856

44  go语言全套视频 下载次数 2852

45  清华学霸尹成Python爬虫视频-ok 下载次数 2845

46  黑马前端36期最全视频和代码 下载次数 2841

47  2018最新全套web前端视频教程+源码下载 下载次数 2839

48  利用Python进行数据分析 pdf下载 下载次数 2834

49  老男孩Python自动化开发12期 老男孩最强一期python高级运维开发课程 第二部分 70GB 下载次数 2832

50  python视频 神经网络 Tensorflow 下载次数 2827