添加短链接的完整链接,使其使用scrapy有效?

时间:2013-01-21 09:32:17

标签: scrapy

  

可能重复:
  Scrapy Modify Link to include Domain Name

我使用此代码从html网站中提取数据,并将数据存储在XML文件中,它对我很有用。

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    items = []
    site1 = hxs.select('/html/body/div/div[4]/div[3]/div/div/div[2]/div/ul/li')
    for site in site1:
        item = NewsItem()

        item ['title'] = site.select('a[2]/text()').extract()
        item ['image'] = site.select('a/img/@src').extract()
        item ['text'] = site.select('p/text()').extract()
        item ['link'] = site.select('a[2]/@href').extract()


        items.append(item)

    return items

但我面临的问题是网站提供了['image']的简短链接,如下所示:

<img src="/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"

虽然完整链接应该是这样的:

<img src="http://www.aleqt.com/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"

我想知道如何修改我的代码以自动添加缺失的链接

2 个答案:

答案 0 :(得分:1)

你可以试试这个

item ['link'] = urljoin(response.url, site.select('a[2]/@href').extract())

答案 1 :(得分:0)

假设所有这些图片链接都需要添加“http://www.aleqt.com”,你可以这样做:

def parse(self, response):
    base_url = 'http://www.aleqt.com'
    hxs = HtmlXPathSelector(response)
    items = []
    site1 = hxs.select('/html/body/div/div[4]/div[3]/div/div/div[2]/div/ul/li')
    for site in site1:
        item = NewsItem()    
        item ['title'] = site.select('a[2]/text()').extract()
        item ['image'] = base_url + site.select('a/img/@src').extract()
        item ['text'] = site.select('p/text()').extract()
        item ['link'] = base_url + site.select('a[2]/@href').extract()
        items.append(item)
    return items

或者,如果您已将完全相同的网址添加到start_urls列表中(假设只有一个,则可以将base_url替换为self.start_urls[0]