刚学爬虫没多久,在学习的道路上遇到点问题:用xpath爬取时,由于是间接爬取,使得第一步爬取的网址的属性为列表(part_link),转换为字符串(part_link_s)后,准备继续爬取具体内容,但总是提示说参数(link)不对,求解答
res=requests.get(url,headers=headers)
selector=etree.HTML(res.text)
url_infos=selector.xpath('//div[@class="book-list"]/ul/li')
for url_info in url_infos:
part_link=url_info.xpath('div[2]/a/@href')
part_link_s=str(part_link)
link='http:'+part_link_s
res1=requests.get(link,headers=headers)
selector=etree.HTML(res1.text)
infos=selector.xpath('//div[@class="book-intro"]/p')
for info in infos:
f_link=info.xpath('div[1]/p')
print(len(f_link))
运行后显示:
raise InvalidURL("Invalid URL %r: No host supplied" % url)
requests.exceptions.InvalidURL: Invalid URL 'http:[]': No host supplied
求告知如何解决
url_info.xpath('div[2]/a/@href')返回的列表,要part_link[0]获取列表的第一个元素
part_link_s=str(part_link[0])
而且你 url_info.xpath('div[2]/a/@href')好像没有获取成功,返回的是一个空列表[]
你检查下xpath是否写正确, 路径前面要加./
part_link=url_info.xpath('./div[2]/a/@href')
res=requests.get(url,headers=headers)
selector=etree.HTML(res.text)
url_infos=selector.xpath('//div[@class="book-list"]/ul/li')
for url_info in url_infos:
part_link=url_info.xpath('./div[2]/a/@href') #路径前面要加./
part_link_s=str(part_link[0]) #加[0]
link='http:'+part_link_s
res1=requests.get(link,headers=headers)
selector=etree.HTML(res1.text)
infos=selector.xpath('//div[@class="book-intro"]/p')
for info in infos:
f_link=info.xpath('./div[1]/p') #路径前面要加./
print(len(f_link))
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!