Datehoer的博客
我本将心向明月,奈何明月照沟渠
Datehoer的博客

当前位置:主页 > 技术分享 > python xpath爬取小说

python xpath爬取小说

浏览: 作者:Datehoer 发布日期:2021-01-19 22:19:00 来源: 原创
最近对学习有点怠慢了,所以其实没什么好的内容发,只能捡一下以前的内容了。
简单发一篇python通过xpath爬取小说的文章吧。
不过其实记录的是我当时的思路以及过程,可能不是很容易懂。

简单记录一下当时的思路,首先小说是通过xpath来获取,但是我发现它的相对定位的方法是要通过id来进行获取的,而每一篇文章的id是不同的,所以这里我想到了使用绝对定位。当然实际上不叫决定定位相对定位,但是这么说比较方便。

首先先把代码复制出来,然后通过筛选进行层级的获取。

/body/div/div/div/main/article/div/div/p


importrequests_html

session=requests_html.HTMLSession()

url="https:/z"

xpath1='//*[@id="post-56013"]/div/header/h2/a'

xpath2='//*[@id="post-55998"]/div/header/h2/a'

xpath3='//*[@id="post-55980"]/div/header/h2/a'

 

nei_xpath='//*[@id="post-56013"]/div/div/p[3]'

zong_xpath='//*[@id="primary"]'

r=session.get("https:/")

#print(r.html.xpath(zong_xpath,first=True).links)

url2='https://x

r=session.get(url2)

xpath000='/body'

res=r.html.xpath('/body/div/div/div/main/article/div/div/p',first=True)

print(res)


然而没想到获取到的结果为none,这个其实我之前也遇到过,当时是使用beautifulsoup解决的,这一次呢?

再查看一下路径

通过f12来进行查看

Body div div div main article div div p

 

最后通过
python xpath爬取小说
通过这个来获取路径的。

这一个发现其实应该是我的关系找错了,也可能不是尝试一下。。

res = r.html.xpath('/html/body/div[1]/div/div[1]/main/article/div/div/p/text()')

res = r.html.xpath('/body/div/div/div/main/article/div/div/p/text()')

好吧,应该是因为选择的问题,应该是前面的div里的[1]没有选择上,所以才会出现问题。

简单尝试一下看看

res = r.html.xpath('/body/div[1]/div/div[1]/main/article/div/div/p/text()')

发现还是有问题啊。。。

但是换成前面的就没问题了,所以应该是根节点出现的问题。

应该是要加上/html就好了


简单说明一下,其实有的时候获取的xpath是绝对路径,但是可能有的页面的内容是一段一段的,比如说我现在爬的这个网站,一句话是一个p标签。这样其实用路径来写比较容易,因为毕竟是免费的站,很多广告之类的,非常的烦。不过其实还是用绝对路径比较方便,不过可能不好想。

importrequests_html

session=requests_html.HTMLSession()

url="https:"

xpath1='//*[@id="post-56013"]/div/header/h2/a'

xpath2='//*[@id="post-55998"]/div/header/h2/a'

xpath3='//*[@id="post-55980"]/div/header/h2/a'

 

nei_xpath='//*[@id="post-56013"]/div/div/p[3]'

zong_xpath='//*[@id="primary"]'

r=session.get("httpsz")

#print(r.html.xpath(zong_xpath,first=True).links)

url2='htt'

r=session.get(url2)

xpath000='/body'

res=r.html.xpath('/html/body/div[1]/div/div[1]/main/article/div/div/p/text()')

print(res)

foriinrange(len(res)):

str=res.pop()

withopen("yanxuan.txt",'a',encoding='utf-8')asfile_object:

file_object.write(str+' ')

 

这就是最终代码了,将获取到的列表通过pop来导出来储存到一个text中,不过我想挑战一下难度,获取个标题。哈哈。继续还是通过xpath

/html/body/div[1]/div/div[1]/main/article/div/header/h1/text()

 

不过其实说真的,获取到xpath后还是要在后面添加上/text()才行

要不获取到的就是标签了。

 

importrequests_html

session=requests_html.HTMLSession()

url="https:/"

xpath1='//*[@id="post-56013"]/div/header/h2/a'

xpath2='//*[@id="post-55998"]/div/header/h2/a'

xpath3='//*[@id="post-55980"]/div/header/h2/a'

 

nei_xpath='//*[@id="post-56013"]/div/div/p[3]'

zong_xpath='//*[@id="primary"]'

bt_xpath='/html/body/div[1]/div/div[1]/main/article/div/header/h1/text()'

r=session.get("https://")

#print(r.html.xpath(zong_xpath,first=True).links)

url2='https:///'

r=session.get(url2)

xpath000='/html/body/div[1]/div/div[1]/main/article/div/div/p/text()'

res_bt=r.html.xpath(bt_xpath)

res=r.html.xpath(xpath000)

#print(res)

foriinrange(len(res)):

str=res.pop(0)

ifi==0:

bt=res_bt.pop()

str=bt+' '+str

withopen("yanxuan.txt",'a',encoding='utf-8')asfile_object:

file_object.write(str+' ')

最终代码。

其中需要记录的是,通过pop()函数获取列表值的话如果不加加参数0,那么就会从后向前输出,所以要让他从头开始!

不过其实这就是一个简单的页面而已,接下来要获取一个列表页的所有链接,然后获取内容,然后再就是获取所有列表(指定)然后获取内容。

进行尝试,测试其余页面

发现大概应该所有的页面都是可以的不管有没有广告,所以接下来只需要获取链接然后进行修改即可。

目前的思路是获取的链接放在列表里然后通过pop来提取,之后储存,貌似可以所有链接都这样干。但是其实这个通过多线程来做比较简单。所以这个目前就到这里吧,等学习一段时间再进行补充。


关于python通过xpath爬取小说的思路简单介绍到这里,如果有什么疑问可以在评论区留言,我会在看到的第一时间进行回复的。


版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/jsfx/128.html。

文章推荐

热门标签

返回顶部
下面为相关推荐
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!