禁赌毒 2022-02-13 17:30 采纳率: 50%
浏览 106
已结题

关于爬虫参数属性不对,无法继续爬取的问题!

刚学爬虫没多久,在学习的道路上遇到点问题:用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

求告知如何解决

  • 写回答

2条回答 默认 最新

  • 关注

    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))
     
     
    
    
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月13日