序言

我们好我叫悲悯,这是我的第二卷控制技术昌明(首篇讲诉的是他们的历经),已连续四天预览了,会花两半小时写出两个两栖作战事例,我也是Longpr,非常感谢我们对我的全力支持。

那时咱要做的是借助Pythonbanlist整座中文网站上的大部份短篇小说文本,只不过在倾城里头,收集甚么文本显然毫无意义,最重要的是我们能自学到我的预测路子,授人以鱼比不上少击众。

已经开始

既然是要收集整站数据,那么我们进入目标中文网站,点击全部作品。

预测(x0)

第一步右键一下查看中文网站源标识符,看里头是否有咱需要的书本源头文件地址(当然是看源头文件地址,因为一本书的文本这么大,然后一页有这么多本书,肯定不可能文本全部在源标识符中)。

可以看到我在元素中可以找到书的名字和介绍,然后关键的是两个跳转的网址,这个网址很关键,因为咱点击这个链接后他会跳到单本短篇小说中。

而单本短篇小说里头势必会有章节分类,而我们要做的肯定是需要把每本短篇小说的章节名字也收集下来。

最终的目的就是,每本短篇小说为两个文件夹,以书的名字命名,然后文件夹内保存大部份章节,每两个章节为两个txt文档,没两个章节名与txt文件名对应。

预测(x1)

反转,切记不要以element作为源标识符去考虑问题!!element可能是浏览器执行了一些JavaScript后所展现的源标识符,与服务器传给浏览器的源标识符是有所不同的。

所以咱还是需要在源标识符中找一找是否有跳转链接和书名。

好吧,源标识符中也是有的。不过你们不能大意,一定要查看源标识符中是否有,element代表不了源标识符。

那么先收集一下第一页的书名和跳转链接

抓取第一页的大部份书籍名字,书籍入口到了书籍入口后,抓取章节名字,章节链接(文字文本)保存importrequestsfromlxml import etreeimportosurl=https://www.qidian.com/allreq=requests.get(url).texthtml=etree.HTML(req)booknames=html.xpath(//div[@class="book-mid-info"]/h4/a/text())tzurls=html.xpath(//div[@class="book-mid-info"]/h4/a/@href)forbookname, tzurl in zip(booknames, tzurls):ifnot os.path.exists(bookname):if os.path.exists(bookname) == False:os.mkdir(bookname)创建文件夹

这里对应着咱的路子,每收集到两个书名就给它单独创建两个文件夹。

完全没问题,到这里咱已经完成第一步了。

预测(x2)

那么接下来就是去模拟请求咱收集到的书本产品目录的跳转链接,然后同样的方法去收集到章节名与章节文本的跳转链接了。

同样的你们他们查看下源标识符,数据也是在里头的。

那就接着写标识符咯

importrequests
from lxmlimportetreeimportos
url = https://www.qidian.com/allreq = requests.get(url).text
html = etree.HTML(req)
booknames = html.xpath(//div[@class="book-mid-info"]/h4/a/text())tzurls = html.xpath(//div[@class="book-mid-info"]/h4/a/@href)forbookname, tzurlinzip(booknames, tzurls):ifnot os.path.exists(bookname):ifos.path.exists(bookname) ==False:
        os.mkdir(bookname)   创建文件夹
    req2 = requests.get("http:"  tzurl).text
    html1 = etree.HTML(req2)
    zjurls = html1.xpath(//ul[@class="cf"]/li/a/@href)zjnames = html1.xpath(//ul[@class="cf"]/li/a/text())forzjurl, zjnameinzip(zjurls, zjnames):print(zjname \n zjurl)

效果图:

预测(x3)

知道这里为甚么没有去把章节名字命名的txt文档保存在文件夹内吗?

因为咱还没有获取到章节的文本呀,是不是需要先把章节文本写到章节的txt里头,然后再保存在文件夹内?

当然这句解释是为了照顾新手。

那么接下来收集章节文本,方法甚么的不讲了, 一模一样的,章节文本同样在源标识符中如上上图所示。

每两个标签只保存一行文本,那么就需要用到把收集到的大部份文本都组合起来,并用换行符隔开,尽量保持文章格式。

标识符走起:

importrequests
from lxmlimportetreeimportos
url = https://www.qidian.com/allreq = requests.get(url).text
html = etree.HTML(req)
booknames = html.xpath(//div[@class="book-mid-info"]/h4/a/text())tzurls = html.xpath(//div[@class="book-mid-info"]/h4/a/@href)forbookname, tzurlinzip(booknames, tzurls):ifnot os.path.exists(bookname):ifos.path.exists(bookname) ==False:
        os.mkdir(bookname)   创建文件夹
    req2 = requests.get("http:"  tzurl).text
    html1 = etree.HTML(req2)
    zjurls = html1.xpath(//ul[@class="cf"]/li/a/@href)zjnames = html1.xpath(//ul[@class="cf"]/li/a/text())forzjurl, zjnameinzip(zjurls, zjnames):print(zjname \n zjurl)
        req3 = requests.get(http:   zjurl).text
        html2 = etree.HTML(req3)
        nrs = html2.xpath(//div[@class="read-content j_readContent"]/p/text())  分散式文本nr = \n.join(nrs)
        file_name = bookname  "\\"  zjname  ".txt"print("正在抓取文章:"  file_name)
        withopen(file_name, a, encoding="utf-8")asf:
            f.write(nr)

效果图:

这里要说明一下,咱还只是抓取了第一页的数据。那么如何抓取整站的数据呢?

预测(x4)

一般稍微有经验的都知道一点,就是当我们翻页的时候,中文网站的url会发生变化,页码一般就是在url上面。

构建个for循环把页码数变为两个变量即可,无需多言,直接上最终的完备标识符,标识符仅供参考,你们最终可以他们去修改效果。

完备的标识符

importsysimportrequests
from lxmlimportetreeimportosforiinrange(sys.maxsize):
    url = fhttps://www.qidian.com/all/page{i}/req = requests.get(url).text
    html = etree.HTML(req)
    booknames = html.xpath(//div[@class="book-mid-info"]/h4/a/text())tzurls = html.xpath(//div[@class="book-mid-info"]/h4/a/@href)forbookname, tzurlinzip(booknames, tzurls):ifnot os.path.exists(bookname):ifos.path.exists(bookname) ==False:
            os.mkdir(bookname)   创建文件夹
        req2 = requests.get("http:"  tzurl).text
        html1 = etree.HTML(req2)
        zjurls = html1.xpath(//ul[@class="cf"]/li/a/@href)zjnames = html1.xpath(//ul[@class="cf"]/li/a/text())forzjurl, zjnameinzip(zjurls, zjnames):print(zjname \n zjurl)
            req3 = requests.get(http:   zjurl).text
            html2 = etree.HTML(req3)
            nrs = html2.xpath(//div[@class="read-content j_readContent"]/p/text())  分散式文本nr = \n.join(nrs)
            file_name = bookname  "\\"  zjname  ".txt"print("正在抓取文章:"  file_name)
            withopen(file_name, a, encoding="utf-8")asf:
                f.write(nr)
1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!