0

我目前正在尝试使用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()

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

我不习惯使用 python,所以解决方案可能非常简单,但是在阅读了一些 Scrapy 之后,推荐使用 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 文件中放入更多信息,例如抓取的项目数量、蜘蛛运行的日期以及域名和/或蜘蛛名称?我试图返回更多变量,但没有奏效。

4

1 回答 1

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()在这种情况下什么是 a ?

于 2012-10-28T15:18:16.797 回答