将完整链接添加到短链接以使其使用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所需的域名不是一项简单的任务。如果网页的设置不提供此类信息,这意味着你必须检测到它,你几乎肯定会遇到您猜错的情况。因为您所能依赖的只是请求信息(可能来自内部请求,可能来自本地主机)或系统网络配置(通常不明显)。