我正在使用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楼 票数:0 已采纳

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

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

删除[1]

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

  ask by Toothfairy translate from so

未解决问题?本站智能推荐:

1回复

Scrapy 迭代 xpath 结果集

我正在尝试从以下站点获取有关 UFC 事件的信息: http ://www.ufcstats.com/statistics/events/completed?page=all 首先,我使用response.xpath('//table[@class="b-statistics__table-eve
2回复

Scrapy,Python,Xpath如何在HTML中匹配各个项目

我是Xpath的新手,尝试抓取以下格式的网站: 列出的值和列出的日期的存在是可选的。 我需要将每个tittle_name与各自的listing_date,listed_value(如果可用)进行分组,然后将覆盖范围记录插入MySQL。 我正在使用scrapy shell ,它
1回复

Scrapy / Python:获取TR项目的未知[索引]

我有这个选择器: 这将返回位于页面不同位置的TR的选择器列表。 有什么办法可以知道每个TR的绝对索引号(从(// TABLE / TR开始),以便以后可以在另一个函数中顺序寻址它们?
1回复

关于Python,Scrapy和Xpath

我正在使用Scrapy和xpaths从网站上获取一堆出售的物业数据。 总共有9个“项目”(销售价格,出售日期,代理商,代理商,地址,财产类型,卧室,浴室和完整URL),每页20条记录。 然后,将结果存储到SQLite3数据库中。 一切工作都非常好,直到我打出的页面的数据有些不完整。
1回复

Scrapy:使用XPath获取项目

我试图提取这段文字This is it从下面的html代码: 我正在尝试: 但是我不知道如何获得title 。 我怎样才能做到这一点?
1回复

Scrapy的Python递归爬取

我正在尝试制作一个抓取工具,以拖动craigslist上的链接,标题,价格和帖子正文。 我已经能够获得价格,但是它返回页面上每个列表的价格,而不仅是特定行的价格。 我也无法将其转到下一页并继续抓取。 这是我正在使用的教程-http: //mherman.org/blog/2012/11
2回复

Scrapy中的for循环中不包含的项目

我认为可能有一个解决此问题的简单方法...我要做的就是提取文本,列出带有我的变量项目['genre']的类型类型,足够简单...但是,作为项目i我正在提取的内容仅出现在我要抓取的页面上,当循环浏览其他项目(例如“艺术家”)时,不包含项目“(体裁)”。 任何帮助,将不胜感激。 这是我认为是相关
2回复

Scrapy - 获取正在解析的项目索引?

我正在尝试使用Scrapy从数据库加载一些XPATH规则。 到目前为止我编写的代码工作得很好,但经过一些调试我已经意识到Scrapy正在异步解析每个项目,这意味着我无法控制解析哪个项目的顺序。 我想要做的是找出列表中的哪个项目当它正在被解析时遇到parse()函数,这样我就可以将该索