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