将文本字符串添加到已删除的数据

时间:2012-10-28 10:44:18

标签: python xml scrapy

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

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文件中放入更多信息,例如刮取的项目数,蜘蛛运行的日期以及域名和/或蜘蛛名?我试图返回更多变量,但这不起作用。

1 个答案:

答案 0 :(得分:0)

替换它:

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()是什么?