【问题标题】:Adding text string to scraped data将文本字符串添加到抓取的数据
【发布时间】:2012-10-28 10:44:18
【问题描述】:

我目前正在尝试使用scrapy。我正在从某个网页抓取几个链接并将它们导出到 xml 文件。问题如下,对于某些站点,链接不包含完整的 url(例如 example.com/page/abc 他们抓取的链接只是来自被抓取页面的相对路径(例如 page/abc)。现在 id 想将基本 url 添加到抓取的变量中,例如。

item['link'] = link.select('a/@href').extract() would become something like:
item['link'] = "http://example.com" + link.select('a/@href').extract()

所以结果将是一个完整的可用 url,但上面的解决方案不起作用(注意在添加字符串时被刮掉,最好我希望 scrapy 自动刮掉完整的 url。

我不习惯使用 python,所以解决方案可能非常简单,但经过一些阅读,推荐使用 Scrapy。

有什么困难吗?

当前代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import MyItem

class MySpider(BaseSpider):
    name = "example-com"
    allowed_domains = ["http://example.com"]
    start_urls = [
        "http://example.com/page.html",
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        links = hxs.select('//div[@class="views-field views-field-title"]')
        items = []
        for link in links:
            item = MyItem()
            item['link'] = link.select('span/a/@href').extract()
            items.append(item)
        for item in items:
            yield item

更新/补充问题

是否也可以在 xml 文件中放入更多信息,例如抓取的项目数量、蜘蛛运行的日期以及域名和/或蜘蛛名称?我试图返回更多变量,但没有奏效。

【问题讨论】:

    标签: python xml scrapy


    【解决方案1】:

    替换这个:

    items = []
    for link in links:
        item = MyItem()
        item['link'] = link.select('span/a/@href').extract()
        items.append(item)
    for item in items:
        yield item
    

    有了这个:

    for link in links:
        item = MyItem()
        url = link.select('span/a/@href').extract()
        item['link'] = allowed_domains[0] + url
        yield item
    

    在这种情况下,MyItem() 是什么?

    【讨论】:

    • 据我所知,MyItem() 指的是 items.py 中的 Field() 定义,scrapy 需要它才能工作,我不确定它的具体用途。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2015-10-06
    • 2011-08-30
    • 2023-03-23
    • 2013-09-24
    相关资源
    最近更新 更多