最近对学习有点怠慢了,所以其实没什么好的内容发,只能捡一下以前的内容了。

简单发一篇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标签。这样其实用路径来写比较容易,因为毕竟是免费的站,很多广告之类的,非常的烦。不过其实还是用绝对路径比较方便,不过可能不好想。
import requests_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)
xpath='/body'
res=r.html.xpath('/html/body/div[1]/div/div[1]/main/article/div/div/p/text()')
print(res)
for i in range(len(res)):
str=res.pop()
with open("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()才行要不获取到的就是标签了。
import requests_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)
xpath='/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)
for i in range(len(res)):
str=res.pop(0)
ifi==0:
bt=res_bt.pop()
str=bt+' '+str
with open("yanxuan.txt",'a',encoding='utf-8')as file_object:
file_object.write(str+' ')

最终代码。其中需要记录的是,通过pop()函数获取列表值的话如果不加参数0那么就会从后向前输出,所以要让他从头开始!
不过其实这就是一个简单的页面而已,接下来要获取一个列表页的所有链接,然后获取内容,然后再就是获取所有列表(指定)然后获取内容。
进行尝试,测试其余页面发现大概应该所有的页面都是可以的不管有没有广告,所以接下来只需要获取链接然后进行修改即可。
目前的思路是获取的链接放在列表里然后通过pop来提取,之后储存,貌似可以所有链接都这样干。但是其实这个通过多线程来做比较简单。所以这个目前就到这里吧,等学习一段时间再进行补充。
关于python通过xpath爬取小说的思路简单介绍到这里,如果有什么疑问可以在评论区留言,我会在看到的第一时间进行回复的。

本文作者:博主:     文章标题:python xpath爬取小说
本文地址:https://zjzdmc.top/jsfx/128.html     
版权说明:若无注明,本文皆为“Datehoer的Blog-个人博客-技术分享”原创,转载请保留文章出处。
最后修改:2021 年 04 月 19 日 03 : 12 PM
如果觉得我的文章对你有用,请随意赞赏