zhangsonghong00 发表于 2021-12-12 19:13:57

关于爬虫xpath的问题,求解答

本帖最后由 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抢票和爬虫电商---淘宝和京东的视频教程吗?不胜感激!

zhangsonghong00 发表于 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()   

wp231957 发表于 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前应有斜杠

zhangsonghong00 发表于 2021-12-12 20:08:18

是这个问题。因为我xpath解析一直后一直显示的是空列表,所以一直换忘记加/斜杠,能不能在解答下为啥我xpath解析后一直是空的列表吗?

wp231957 发表于 2021-12-12 20:20:40

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

你得看一下你要解析的内容是否在源码内
如果不在,当然解析不到

zhangsonghong00 发表于 2021-12-12 20:25:13

非常感谢{:5_110:},应该是我没完整打完代码吧    搜索完小说后跳转失败,所以后续的解析也是不成功。
一直是以为解析的内容出错了!

zhangsonghong00 发表于 2021-12-12 20:54:19

结合老哥给的答案,和百度搜了下这方面的内容。代码一共是有两个错误,一个是xpath解析的语法错误dl前应有斜杠----老哥说的很对。
另一个是在url输入小说名字,搜索跳转中文转码的时候,小说名字得用utf-8转码,我上面用的是gbk。
虽然还没学习到这方面的内容 ,但问题还是解决了
页: [1]
查看完整版本: 关于爬虫xpath的问题,求解答