将完整链接添加到短链接以使其使用scrapy有效?

将完整链接添加到短链接以使其使用scrapy有效?,scrapy,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 = Ne

可能重复:

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

而完整链接应如下所示:

<img src="/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
<img src="http://www.aleqt.com/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
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


我想知道如何修改代码以自动添加缺少的链接,前提是所有此类图像链接都需要“http://www.aleqt.com“除此之外,您还可以这样做:

<img src="/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
<img src="http://www.aleqt.com/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
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添加到“开始url”列表中(并且假设只有一个,您可以将
base\u url
替换为
self.start\u url[0]

,前提是所有此类图像链接都只需要http://www.aleqt.com“除此之外,您还可以这样做:

<img src="/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
<img src="http://www.aleqt.com/a/small/72/72089be43654dc6d7215ec49f4be5a07_w200_h180.jpg"
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添加到“开始url”列表中(并且假设只有一个url),则可以将
base\u url
替换为
self.start\u url[0]

,您可以尝试此方法

item['link']=urljoin(response.url,site.select('a[2]/@href').extract())
您可以试试这个


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

你真的需要完整的url吗?为什么?在web应用程序中,相对链接比完整的url有一些优势。从相对链接中找出构建完整url所需的域名不是一项简单的任务。如果你的网页设置不提供此类信息,意味着你必须检测到它,你几乎可以肯定你可能会遇到猜测错误的情况。因为你所能依赖的只是请求信息(可能来自内部请求,可能来自本地主机)或系统网络配置(通常是不明确的)。你真的需要完整的url吗?为什么?相对链接比web应用程序中的完整url有一些优势。从相对链接中找出构建完整url所需的域名不是一项简单的任务。如果网页的设置不提供此类信息,这意味着你必须检测到它,你几乎肯定会遇到您猜错的情况。因为您所能依赖的只是请求信息(可能来自内部请求,可能来自本地主机)或系统网络配置(通常不明显)。