我目前正在尝试使用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 文件中放入更多信息,例如抓取的项目数量、蜘蛛运行的日期以及域名和/或蜘蛛名称?我试图返回更多变量,但没有奏效。