鱼C论坛

 找回密码
 立即注册
查看: 1157|回复: 6

[已解决]关于爬虫xpath的问题,求解答

[复制链接]
发表于 2021-12-12 19:13:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangsonghong00 于 2021-12-12 19:29 编辑

新鱼油,第一次发帖。
学习了Python一个星期了,主要是看小甲鱼的视频。原谅我,可耻的还没买会员,只想白嫖。
一个人摸索比较困难,主要是错误点不知道在哪,还好有论坛可以交流。
-------笔趣阁小说爬虫------
1------------------搜索小说
2----------------------退出
请输入数字相应功能:1
请输入你想要爬取的小说:大梦主
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\编程\爬虫.py", line 62, in <module>
    main()
  File "C:\Users\Administrator\Desktop\编程\爬虫.py", line 52, in main
    find_book(book_url)
  File "C:\Users\Administrator\Desktop\编程\爬虫.py", line 32, in find_book
    x=root.xpath('//div[@class="item"]dl/dd/text')
  File "src\lxml\etree.pyx", line 1582, in lxml.etree._Element.xpath
  File "src\lxml\xpath.pxi", line 305, in lxml.etree.XPathElementEvaluator.__call__
  File "src\lxml\xpath.pxi", line 225, in lxml.etree._XPathEvaluatorBase._handle_result
lxml.etree.XPathEvalError: Invalid expression

本来想上图的 但是好像没有权限可以上图。
虽然还没完整学习完小甲鱼的整个Python视频,但是尝试了自己爬虫笔趣阁,有成功也有失败的。

这个是失败的,在笔趣阁搜索页面,输入小说名字后,进行判定xpath解析是否为空[]列表,
但是xpath解析不出来,我用谷歌浏览器xpath helper 查件尝试了是可以解析出小说名字的。

求助下各位大大,这种是什么错误,xpath解析位置出错了吗?

还有如果有好心的大大,可以留言下发下关于爬虫12306抢票和爬虫电商---淘宝和京东的视频教程吗?不胜感激!

最佳答案
2021-12-12 19:49:49
zhangsonghong00 发表于 2021-12-12 19:23
import os
import requests
from lxml import etree

x=root.xpath('//div[@class="item"]dl/dd/text')
语法错误dl前应有斜杠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-12 19:23:40 | 显示全部楼层
import os
import requests
from lxml import etree
from docx import Document
from urllib import parse

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}



def search_book():
    url='https://www.biqugeu.net/searchbook.php?keyword='

    book_name=input('请输入你想要爬取的小说:')

    book_name=parse.quote(book_name.encode('gbk'))

    book_url=url+book_name

    return book_url

   

def find_book(book_url):

    url=book_url

    html=requests.get(url,headers)

    root=etree.HTML(html.content.decode('utf-8'))

    x=root.xpath('//div[@class="item"]dl/dd/text')

    if (root.xpath('//div[@class="item"]/dl/dd/text')==[]):
        print('搜索的书不存在,请正确输入书名')
    else:
        print('找到了')
   

    print(x)

        

def main():
    print("-------笔趣阁小说爬虫------")
    print("1------------------搜索小说")
    print("2----------------------退出")
    flag=int(input("请输入数字相应功能:"))
    while 1:
        if flag==1:
            book_url=search_book()
            find_book(book_url)
        elif flag==2:
            exit(1)
        else:
            input("请输入正确的命令:")
        flag=int(input("请重新输入数字选择相应功能:"))
      


if __name__=='__main__':
    main()   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-12 19:49:49 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
zhangsonghong00 发表于 2021-12-12 19:23
import os
import requests
from lxml import etree

x=root.xpath('//div[@class="item"]dl/dd/text')
语法错误dl前应有斜杠
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 20:08:18 | 显示全部楼层
是这个问题。因为我xpath解析一直后一直显示的是空列表,所以一直换忘记加/斜杠,能不能在解答下为啥我xpath解析后一直是空的列表吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-12 20:20:40 From FishC Mobile | 显示全部楼层
zhangsonghong00 发表于 2021-12-12 20:08
是这个问题。因为我xpath解析一直后一直显示的是空列表,所以一直换忘记加/斜杠,能不能在解答下为啥我xpat ...

你得看一下你要解析的内容是否在源码内
如果不在,当然解析不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 20:25:13 | 显示全部楼层
非常感谢,应该是我没完整打完代码吧    搜索完小说后跳转失败,  所以后续的解析也是不成功。
一直是以为解析的内容出错了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-12 20:54:19 | 显示全部楼层
结合老哥给的答案,和百度搜了下这方面的内容。代码一共是有两个错误,一个是xpath解析的语法错误dl前应有斜杠----老哥说的很对。
另一个是在url输入小说名字,搜索跳转中文转码的时候,小说名字得用utf-8转码,我上面用的是gbk。
虽然还没学习到这方面的内容 ,但问题还是解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 17:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表