1

可能重复:
Scrapy 修改链接以包含域名

我使用此代码从 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"

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

4

2 回答 2

1

你可以试试这个

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

于 2013-01-22T01:15:23.633 回答
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

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

于 2013-01-22T01:08:43.863 回答