吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1378|回复: 18
收起左侧

[求助] 【求助】爬取某小说只能获取尾部文字内容

[复制链接]
coolyang962 发表于 2023-6-24 14:22
本帖最后由 coolyang962 于 2023-6-24 14:28 编辑

【背景】
新手学习爬虫,目标爬取“https://m.hetushu.com/book/5978/4462763.html”小说正文内容

【求助】
爬取正文的步骤中,发现requests.get()只获取到了网页尾部的文字


【定位】
经过初步排查,发现元素中能看到完整文字内容,且xpath也能匹配上(图一)。但网络抓取的html(图二),get()到的数据都是不完整的(图三)

图一:
1.png

图二:
2.png

图三:
3.png


实在没有思路了,在此求各位专家指导指导~谢谢

【代码段】

import requests
from lxml import html

def get_content(url):

    contents=[]

    headers = {
        'authority': '36b7.manhuacangku.com',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'none',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57',
    }

    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    if response.status_code != 200:  # 判断是否请求成功
        print("请求失败")
    print(response.text)
    html_content = response.content

    etree = html.etree
    html_ = etree.HTML(html_content)

    contents = html_.xpath("//dd[@id='content']//div/text()")
    print(contents)


def main():

    #获取每章节文字内容
    get_content('https://m.hetushu.com//book/5978/4462762.html')

if __name__ == '__main__':
    main()
1.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

youth96 发表于 2023-6-24 15:12
图2部分,div的顺序是错乱的,并不是不完整的
DaveBoy 发表于 2023-6-24 15:20
1. 我看好像是乱序,不是只有结尾
2. request下来的div没有class,但是元素里有,应该是在js中进行了元素操作,调整顺序和class的

大概看出这么多,其他没空细看
 楼主| coolyang962 发表于 2023-6-24 15:43
youth96 发表于 2023-6-24 15:12
图2部分,div的顺序是错乱的,并不是不完整的

谢谢回复,我再次确认,1、代码中通过xpath查找文章开头的一段文字,发现get回来的内容无法匹配到;2、另外,把get回来的内容全部粘贴到notepad中查找,也可证实缺失了文章开头的文字内容。综上,确实部分文字没有get回来呢。
 楼主| coolyang962 发表于 2023-6-24 15:46
DaveBoy 发表于 2023-6-24 15:20
1. 我看好像是乱序,不是只有结尾
2. request下来的div没有class,但是元素里有,应该是在js中进行了元素 ...

谢谢提醒,确实get回来的div没有class参数,这样说有可能这个网页文字是动态请求回来的。

关于提到的第一点回复,我又确认了次1、代码中通过xpath查找文章开头的一段文字,发现get回来的内容无法匹配到;2、另外,把get回来的内容全部粘贴到notepad中查找,也可证实缺失了文章开头的文字内容。综上,确实部分文字没有get回来呢。
youth96 发表于 2023-6-24 15:56
coolyang962 发表于 2023-6-24 15:43
谢谢回复,我再次确认,1、代码中通过xpath查找文章开头的一段文字,发现get回来的内容无法匹配到;2、另 ...

[Python] 纯文本查看 复制代码
import requests

res = requests.get("https://m.hetushu.com/book/5978/4462763.html")

print(res.text)


[HTML] 纯文本查看 复制代码
<!DOCTYPE HTML>
<html lang="zh-Hans">
<head>
<meta charset="utf-8" />
<meta name="Copyright" content="和图书" /> 
<meta name="keywords" content="免费阅读,在线阅读,免费小说,电子书,书籍,小说" />
<meta name="description" content="免费提供墨书白创作的言情小说《长风渡》第一章未删减版,完整版在线阅读" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="alternate" hreflang="zh-Hant"  />
<link rel="canonical"  />
<link type="text/css" rel="stylesheet" href="/command/3g.css" />
<script type="text/javascript" src="/command/language.js"></script>
<script type="text/javascript" src="/command/3g.js"></script>
<script src="/command/header.js"></script>
<link rel="stylesheet" type="text/css" href="/command/section.css" />
<title>长风渡_第一章_墨书白_和图书_手机阅读</title>
</head>
<body data-type="0" data-doctype="json" data-randomtype="substep" class="day">
<dl class="body">
<dt class="title"><h2>第一章</h2><span id="goback"></span><a id="myspace" href="/favorite/index.php"></a><span id="more"></span></dt><dd id="control"><div id="console_b"></div><a href="/book/5978/catalog-1.html" id="dir_b"></a><a id="back" href="/book/5978/index.html"></a></dd>
<dd id="console"></dd>
<dd id="content" style="font-size:20px;line-height:2.4;"><div class="cmask"></div><div>只是顾九思既然去了刘家,应当也不会来柳家,毕竟刘家姑娘刘雨思的背景,比柳玉茹更好一些。柳宣如今说起来,也不过就是给柳玉茹添点面子而已。</div><div>……</div><div>一番细想下来,柳玉茹顿觉可笑,她竟然被这样的梦境给吓住了。</div><div>他们两家一直交好,虽然不怎么听闻王荣和顾九思往来,但想必关系也不差,怎么会有他把王荣打断腿一说?</div><div>范轩……到底是巧合,还是预知?</div><div>“这怕是不行,”叶老太太摇了摇头,“我儿一个朋友出任幽州节度使,他赶去庆贺,还未归来。”</div><div>“你怎的知道?”叶老太太有些诧异,柳玉茹心里猛地一惊,犹如受到了当头一棒,然而她面上不显,只是道,“听朋友提起,之前我还不信,节度使这样的位置,岂是说换就换的?”</div><div>或许是早上的梦境一直让她有些恍惚,然而话已经问了出来,也不是什么大事,她刻意放柔了声音,假作懵懂道:“新任的幽州节度使大人,可是姓范名轩?”</div><div>而叶老太太听了柳宣的话,也没多想,只是道:“您放心,等乡试完毕,我立刻让我儿带着世安上门提亲。”</div><div>众人皆知梁王乃西南忠心耿耿的异姓王,梁王手握重兵,曾数次救天子危难,为了让天子放心,还把自己一家老小全都送到了东都,作为人质安抚众人的揣测。他若是要反,大约早就反了,还等着现在?</div><div>“老夫人哪里的话,”柳宣给叶老太太倒了茶,笑着道,“玉茹还是因为常在你身侧,您教导<kbd>和图书</kbd>的好。叶家书香门第,让我们玉茹也沾染了些墨香。”</div><div>而柳玉茹听到“刘家”,她下意识抬眼看了看,心里有了几分不安。刘雨思是她的手帕交,与她情谊深厚,顾九思居然去了她家?</div><div>叶老太太见她进来了,高兴道:“来来,玉茹,坐过来说话。”</div><div>她不知道顾九思认不认识她,她想也可能认识,毕竟她在扬州城,也颇有点名声,但这名声却不是什么值得庆贺的事儿,原因无他,她的名声就是:出了名的艰难。</div><div>她垂眼琢磨着,等一会儿得去见见刘雨思。</div><div>为了嫁给叶世安,她常去叶家找叶韵,然后就陪着叶韵一起照顾叶老太太,哄着叶老太太开心,这么一照顾,就是七八年,叶老太太也就对她上了心。与其让孙儿娶一个不知根底的女人,倒不如娶一个知根知底又贴心的柳玉茹。</div><div>说着,柳宣似乎是有些忧虑道:“我听说顾家那位大公子也到了年纪,他母亲正给他到处想看,前阵子才上了刘家的门。老夫人,”柳宣转过头去,同叶老太太道,“得抓紧些。”</div><div>亲事差不多说完,叶老太太闲聊了一阵,便起身离去。</div><div>得了这话,她自是明白了叶老太太的意思,便一直等着。</div><div>双方互相恭维了一番后,柳宣才终于给柳玉茹说了正事儿,轻咳了一声道:“玉茹啊,今天老夫人上门来,是和我们商议你的婚事。她希望你能和叶家大公子结秦晋之好,我们便叫你过来问问,你怎么想?”</div><div>“梁王”</div><div>听到<q>和*图*书</q>这话,柳玉茹心里飞快跳起来。</div><div>今日听说他在春风楼一掷千金博花魁娘子一笑,明日听闻他在赌坊豪赌万两白银一夜输光。偶尔她上集市,也会遇见顾九思,这公子哥儿十分显眼,常常就是身着白衣,手里拿个折扇,提着个鸟笼,一张姣好的脸上笑得春风得意,眼角眉梢俱是傲慢轻蔑。</div><div>她是个极有目标和执行力的人,为了走好这一生,她很早就定了,她想嫁给叶家的大公子,叶世安。</div><div>等叶老太太走后,柳玉茹回到屋里,将印红叫了下去,整个人便焦躁起来。</div><div>人长得太好,做事儿又如此招摇,想认不出都难。</div><div>大伙儿笑了起来,柳宣道:“那便定下了。不过大公子如今似乎正在参加乡试,不知提亲得到何时了?”</div><div>她来到书桌前,开始拼命写着梦里的信息。</div><div>所有人看向了她,柳玉茹愣了愣,她自己都没明白,自己是为什么会突然问出这一句。</div><div>印红的话让柳玉茹慢慢回神,等她反应过来,她轻拍在自己的额头上,叹息道:“是做了个噩梦。”</div><div>她很想上前厅去听一下,叶老太太是如何说的,可她晚辈,未经召唤过去,始终是不妥,等了许久之后,终于有人过来,让柳玉茹上前厅去,柳玉茹已经梳洗完毕,她深吸了一口气,跟着侍女到了前厅。</div><div>“原是如此,”叶老太太笑起来,“你说得是,不过这范轩在幽州已经任职十三年,根基深厚,上一任节度使病去,临死之前举荐了他,这才让他当上了节度使<strike>和*图*书</strike>。”</div><div>幽州节度使如今虽然不知道具体名谁,但也知是姓赵,绝不是她梦里那个范轩。</div><div>活在这样的环境里,柳玉茹便学会了时时守着规矩,懂时务,知进退,见谁都有三分人缘,不做任何逾矩之事,成为一个标标准准的大家闺秀,找个妥妥当当的人,体体面面嫁了,安安分分过上一辈子,这就是她一生的规划。</div><div>柳玉茹抬头朝着叶老太太笑了笑,却还是恭恭敬敬先行了礼,随后得了柳宣的应许,才来到叶老太太身边坐下。叶老太太握着她的手,笑着道:“玉茹啊,真是我见过最乖巧有礼的姑娘了。我以前就想着,柳家的家教这样好,竟能教出这样好的姑娘来,若这姑娘是我孙女,那就太好了。”</div><div>怎么会梦到顾九思呢?</div><div>在座所有人都明白柳宣的意思,顾九思是扬州出了名的霸王,但家大势大,他父母自然想让他娶扬州城最好的姑娘。只是这扬州凡是好一点的姑娘,也都看不上他,怕就怕他退而求其次,来求娶柳玉茹这样,姑娘拔尖、家世一般的,到时候仗着家世逼着人,就是不嫁也得嫁了。</div><div>她睁开眼时,已是晨时,太阳刚刚出来,光温柔的落在房间里,丫鬟印红捧了刚从院子里采摘的凤仙回来,插入花瓶中,笑着看向柳玉茹道:“小姐醒了?”</div><div>她找着无数理由。然而过了许久,她还是忍不住,站起身道:“去帮我同月姨娘说一声,我要去刘家一趟,请她应允。”</div><div>“救我……”</div><div>等到了今日,她用水清<strike>和-图-书</strike>洗了脸,让自己从噩梦中清醒过来,便听印红高兴道:“小姐,叶老太太来了!”</div><div>叶家与他们这些商户不同,乃士族出身,早先叶家就住在柳家对门,算得上是门当户对。柳玉茹与叶家大小姐叶韵交好,常去叶家串门子,她早早看出来,叶家家风正,家里不是个嫌贫爱富的,老太太也喜欢她,而叶世安这位公子,早些年还未去白鹭书院时她见过几次,那时还小,不大看得出相貌,但人也长得算端正,虽然不大爱说话,做事却很踏实,小的时候就是一干童生里功课最好的,日后或许也能挣个功名。叶世安人不错,叶家也好,嫁过去,差不多就是能满足她这“安安稳稳”过一生的目标的。</div><div>听了这话,柳玉茹压着冲动,温和道:“玉茹听爹娘的。”</div><div>听到这话,柳宣点着头,感慨道:“人生际遇啊……”</div><div>“幽州节度使,范轩。”</div><div>听到“幽州节度使”,柳玉茹下意识道:“可是姓范?”</div><div>她和顾九思其实根本八竿子打不到边,顾九思是这扬州城最有权有势的富豪家中的嫡子,而她只是一个小小布商之家不受宠的嫡女。之所以知道顾九思,也无非是因为这位少爷平日在扬州城里日日闹个不停,走哪儿都听闻罢了。</div><div>不仅是噩梦,还有些荒唐。</div><div>“那不若让叶老爷先来提亲吧?”张月儿适时开口,“这事儿本也是长辈的事儿,大公子回不回来,倒也无妨,先定下来,以免后面再生变故。”</div><div>她慢慢闭上眼睛。</div><div>她家在扬州,勉强挤<strike>hetushu.com.com</strike>进富商之列,以丝绸布料为营生。她父亲柳宣生性风流,而母亲苏婉则是父母媒妁之言所娶,故而虽然是正室,却不受宠爱,加之身体不好,这么多年,也就生了柳玉茹一个女儿,反倒是妾室张月儿,生了两男一女。</div><div>她不由得想,觉得自己也是太过奇怪了。</div><div>柳玉茹是被鸡鸣声惊醒的。</div><div>柳玉茹轻轻喘息着,没有回话,她满脑子都是那双绝望又痛苦的眼睛,印红皱了皱眉头,走到柳玉茹身前,不由得道:“小姐可是魇住了?”</div><div>于是她前日及笄礼,叶老太太亲自上门来当了她的宾客,私下里同她道:“过些时日,我便再单独来找你父母聊聊。”</div><div>厅里坐了三个人,叶老太太坐在正上方左手边的椅子上,柳宣坐在右手边,而张月儿则是笑意盈盈坐在柳宣身旁最近的椅子上,同叶老太太说着话。</div><div>柳玉茹先是愣了愣,随后迅速低下头来,遮住了那一丝不悦的情绪。</div><div>或许是巧合吧?</div><div>而顾九思和王荣……</div><div>柳玉茹拼了命说服自己,或许她过去就听过这个消息,只是忘了……</div><div>“顾九思,王荣”</div><div>没有一个儿子,于这个时代便是女子最大的错,于是苏婉虽为正妻,家中却是由张月儿掌管中馈,有名无权,那自然过得也不甚如意,于是整个扬州城都知道,柳宣宠妾灭妻,对苏婉和柳玉茹十分同情。</div><div>她不仅梦到了和她素昧平生的顾九思,还居然梦到了梁王谋反,天下大乱。</div><div>她把梦里所有事都写了一遍,看着上面的字,脑海里浮现出了顾九思那双眼。</div></dd>
<dd class="page" id="spage">
<a href="/book/5978/4462762.html" id="pre" class="pre" title="上一页">上一页</a><a href="/book/5978/4462764.html" id="next" class="next" title="下一页">下一页</a></dd>
</dl>
<div class="menu"><a href="/index.php">首页</a>><a href="/book/index.php">小说</a>><a href="/book/list.php?type=%E8%A8%80%E6%83%85%E5%B0%8F%E8%AF%B4">言情小说</a>><a href="/book/5978/index.html">长风渡</a></div>
<div id="foot">
  <a href="###">留言板</a>|<a href="###">帮助</a>|<a href="###">客户端</a>
</div>
<script type="text/javascript" src="/command/init.js"></script>
<script type="text/javascript" src="/command/section.js"></script>
</body>
</html>


直接请求,23行是长段内容 23行3544对应的是开头第一行的【鸡鸣】,3g.js应该是处理的js
 楼主| coolyang962 发表于 2023-6-24 16:12
youth96 发表于 2023-6-24 15:56
[mw_shl_code=python,true]import requests

res = requests.get("https://m.hetushu.com/book/5978/44 ...

啊,确实,直接把get()回复的粘贴出来搜索,前部分文字是存在的。

那新问题来了,解决乱序能提供些思路吗?
十万菠萝拍黄瓜 发表于 2023-6-24 16:20
先请求那个.json文件,拿到响应头的token,通过base64.decode(token).split(/[A-Z]+%/) 得到的数组就是顺序.aaa = ["38", "56", "10", "9", "60", "43", "47", "46", "41", "6", "32", "39", "30", "16", "40", "22", "36", "50", "24", "33", "55", "26", "14", "20", "51", "15", "35", "52", "45", "3", "28", "49", "8", "20", "32", "12", "38", "1", "65", "60", "27", "23", "36", "51", "55", "46", "15", "4", "45", "62", "20", "15", "0", "2", "28", "33", "34", "66", "13", "67", "59", "23", "10", "62"];0在这个数组的第52个,即aaa[52] = 0 ,也就是//dd[@id'content']/div得到的数组中第52个就是最终显示的第一句话
DaveBoy 发表于 2023-6-24 16:29
跟原来的html不一致,说明肯定有html元素的修改。
选中body,选择中断于子树修改,就能找到调整顺序的算法,然后跟一下,逆向算法就能得到排序思路了
bobo2017365 发表于 2023-6-24 18:05
虽然requests确实香,我还是倾向于选择selenium,你可以试试。不用复杂的去抓包分析
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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