我在使用scrapy迭代爬网时遇到问题。我正在提取标题字段和内容字段。问题是我得到一个JSON文件,其中列出了所有标题,然后列出了所有内容。我想获取{title},{content},{title},{content},这意味着我可能必须遍历解析函数。问题是我无法弄清楚正在循环通过哪个元素(即for x in [???]),这是代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.spiders import SitemapSpider

from Foo.items import FooItem


class FooSpider(SitemapSpider):
    name = "foo"
    sitemap_urls = ['http://www.foo.com/sitemap.xml']
    #sitemap_rules = [


    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        items = [
        item = FooItem()
        item['title'] = hxs.select('//span[@class="headline"]/text()').extract()
        item['content'] = hxs.select('//div[@class="articletext"]/text()').extract()
        items.append(item)
        return items

最佳答案

您的xpath查询返回页面上的所有标题和所有内容。我想你可以做:

titles = hxs.select('//span[@class="headline"]/text()').extract()
contents = hxs.select('//div[@class="articletext"]/text()').extract()

for title, context in zip(titles, contents):
    item = FooItem()
    item['title'] = title
    item['content'] = context
    yield item


但这并不可靠。尝试执行xpath查询,该查询返回内部带有titlecontent的块。如果您向我显示xml源,我会为您提供帮助。

blocks = hxs.select('//div[@class="some_filter"]')
for block in blocks:
    item = FooItem()
    item['title'] = block.select('span[@class="headline"]/text()').extract()
    item['content'] = block.select('div[@class="articletext"]/text()').extract()
    yield item


我不确定xpath查询,但我认为想法很明确。

关于python - 不确定要使用Scrapy进行迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10100495/

10-11 17:55