繁体   English   中英

Python + Scrapy,仅将1个项目保存到db,迭代

Python + Scrapy, only saving 1 item to db, Iteration

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在使用Python和Scrapy库,它的想法是蜘蛛化url,将所需的字段保存到db中(在本例中为新闻项),不幸的是,它目前仅保存1个列表项,而不是几个。似乎无法正确迭代。

非常感谢您的帮助



from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import Join, MapCompose
from scraper_app.items import ListItem

class ListSpider(BaseSpider):

    name = "news_list"
    allowed_domains = ["example.com"]
    start_urls = ["http://www.example.com/Default/Section/1"]

    news_items_xpath = '//*[@id="section-news"]/section/ul/li[1]/div'
    item_fields = { 'title': './/div/h3',
    'link': './/div/h3/a',
    'description': './/div/p/text()',
    'date': './/div/div[2]'}


    def parse(self, response):

        selector = HtmlXPathSelector(response)

        # iterate over deals
        for news in selector.select(self.news_items_xpath):
            loader = XPathItemLoader(ListItem(), selector=news)

            # define processors
            loader.default_input_processor = MapCompose(unicode.strip)
            loader.default_output_processor = Join()

            # iterate over fields and add xpaths to the loader
            for field, xpath in self.item_fields.iteritems():
                loader.add_xpath(field, xpath)
            yield loader.load_item()



HTML:

<div id="section-news" class="block secondary">
            <section class="inner">
                <ul class="thumbs">
                    <li>
                        <div>
                            <div class="img">
                                <a href="/Detail/2015/01/14/393107/AntiIsraelism-not-antiSemitism"><img src="http://217.218.67.233/photo/20150114/59b5efd9-3c1c-47b1-a014-4ca0fedadeb6.jpg" alt="uk jews" /><i class="icon-play"></i></a>
                            </div>
                            <div class="desc">
                                <h3 class="title"><a href="/Detail/2015/01/14/393107/AntiIsraelism-not-antiSemitism">‘Anti-Israelism not anti-Semitism’</a></h3>
                                <div class="date">Wed Jan 14, 2015 7:27PM</div>
                                <p>A new survey which reveals that nearly half of Britons hold anti-Semitic views.</p>
                            </div>
                        </div>
                    </li>
                    <li>
                        <div>
                            <div class="img">
                                <a href="/Detail/2015/01/14/393095/Turkey-bans-arms-delivery-reports"><img src="http://217.218.67.233/photo/20150114/2de1eb77-ba2a-49c9-a232-ab4cf82ffc1d.jpg" alt="Syria-militants" /></a>
                            </div>
                            <div class="desc">
                                <h3 class="title"><a href="/Detail/2015/01/14/393095/Turkey-bans-arms-delivery-reports">Turkey bans arms delivery reports</a></h3>
                                <div class="date">Wed Jan 14, 2015 7:22PM</div>
                                <p>Turkey bans media reports on alleged arms delivery to militants in Syria.</p>
                            </div>
                        </div>
                    </li>
                    <li>
                        <div>
                            <div class="img">
                                <a href="/Detail/2015/01/14/393099/Egypt-Israel-gas-imports-possible"><img src="http://217.218.67.233/photo/20150114/c63935fb-8221-43fc-8103-6f49f013cbfd.jpg" alt="Egypt-Israel" /></a>
                            </div>
                            <div class="desc">
                                <h3 class="title"><a href="/Detail/2015/01/14/393099/Egypt-Israel-gas-imports-possible">Egypt: Israel gas imports possible</a></h3>
                                <div class="date">Wed Jan 14, 2015 7:11PM</div>
                                <p>Egypt says importing gas from Israel is a possibility.</p>
                            </div>
                        </div>
                    </li>
1 个回复

问题是您的xpath仅限于单个列表条目

news_items_xpath = '//*[@id="section-news"]/section/ul/li[1]/div'

删除[1]

news_items_xpath = '//*[@id="section-news"]/section/ul/li/div'
1 将Scrapy项目保存到MongoDB

在我的拼凑项目的pipelines.py中,我试图将抓取的项目保存到MongoDB。 但是,我不确定我的做法是否正确,因为在刮擦之后,当我进入mongo shell并使用find()方法时,什么也没回来。 在我进行抓取期间,scrapy的日志确实向我显示了所有已抓取的项目,并且通过save ...

2 Scrapy 不将值保存到项目

从今天起,我的蜘蛛不会将任何信息保存到我的项目“DuifpicturesItem”中。 我为不同的客户创建了几乎相同的蜘蛛,但这个蜘蛛不会保存任何东西,不知道为什么。 我的 items.py 只有两个字段:图片和链接 在我的控制台中,我可以看到,我收集了正确的数据,但它不会保存它 我的代码 # -* ...

3 Scrapy和DuplicatesPipeline避免将重复项保存到db

目前,我基于Scrapy库的Spider正在抓取一个网址(此网址每分钟都会更新一次新条目),并将新闻列表项保存到数据库中,该列表每小时都​​会更新一次,我正尝试避免通过添加这些新闻项的重复项在我的pipelines.py中使用“ DuplicatesPipeline(object):类” ...

5 仅在迭代结束时将项目保存在Scrapy中

我的代码流有问题。 我试图: -在第n.1页中,迭代一个table并获取有关每行项目的一些信息,因为每一项都获得第n.2页的链接 -转到之前捕获的第n.2页,并在table进行迭代,以获取第n.3页的每一行的链接,其中包含第n.2页的table中每一行的重要信息 这是代码: ...

6 将引用$(this)保存到DB

我不确定如何正确地提出这个问题,因为我对DOM的理解是缺乏的。 我要做的是捕获任何给定DOM元素上的任何click事件。 然后我想保存元素类型以及对数据库中元素的完整引用。 但我不确定这是不可能的? 我想要实现的是以某种方式保存与Web应用程序的漏洞交互,以便您稍后可以在给定会话 ...

7 将数组保存到DB

我是PHP Arrays的新手......但是我创建了一个数组来获取表单中提交的2个日期之间的所有日期。 见下文: 这导致以下结果 数组([0] =&gt; 2016-10-10 [1] =&gt; 2016-10-11 [2] =&gt; 2016-10-12 [3] ...

8 将 java BitSet 保存到 DB

使用 JPA,我希望能够将 BitSet 保存到 DB 并将其拉回来。 假设我有: 我应该定义一个“columnDefinition”吗? 我真的不明白它是如何持久化的(使用 toString()?),而且它是如何从数据库加载回来的。 你能帮我解决这个问题吗? 谢谢! ...

9 Django Form不会保存到DB

我有一个Django Form对象,我提交并尝试保存 - 但由于某种原因它不会写入数据库。 DB没有反映这一点。 我的下一行是断言 - 所以没有其他事情发生。 ...

10 将scrapy结果保存到mysql中

我找到了其他答案,但是没有用。 所以这是我的代码: 我不确定如何将所有抓取的抓取数据插入mysql数据库。 请告诉我如何正确执行此操作。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM