日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

爬取千千小说 -- xpath

發(fā)布時(shí)間:2023/12/15 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 爬取千千小说 -- xpath 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天以其中一本小說為例,講一下下載小說的主體部分,了解正常的爬取步驟,用到的是request和xpath。

爬取數(shù)據(jù)三步走:訪問url --》爬取數(shù)據(jù) --》保存數(shù)據(jù)

一、訪問千千小說網(wǎng)址:https://www.qqxsnew.com/

二、隨便選一部小說,打開章節(jié)目錄界面(比方說魔道祖師):https://www.qqxsnew.com/18/18991/

三、開始編寫代碼。

a. 利用request訪問網(wǎng)頁,是get請(qǐng)求還是post請(qǐng)求要看網(wǎng)頁上面寫的是啥

右擊檢查,選擇network,隨便找個(gè)頁面,看下request Method方法是什么。

url = "https://www.qqxsnew.com/18/18991/"
html = requests.get(url, headers=headers).text

b. 得到網(wǎng)頁的html頁面(html頁面 == 在網(wǎng)頁鼠標(biāo)右擊“查看網(wǎng)頁源代碼”),獲取章節(jié)名字和章節(jié)鏈接。

  章節(jié)名字和章節(jié)鏈接獲取需要用到XPath --》在網(wǎng)頁鼠標(biāo)右擊檢查 --》定位到任意章節(jié)(如第一章)--》copy --》copy XPath --》//*[@id="list"]/dl/dd[13]/a

  

  如果安裝過XPath插件的話,可以將上面復(fù)制的XPath在插件里面查詢,可以看到只查詢到了一個(gè)

  

  我們的目的是獲取到所有章節(jié)的名字和鏈接,分析上面XPath的字串,發(fā)現(xiàn)dd[13]這個(gè)地方是定位,每個(gè)dd都是一個(gè)章節(jié),所以我們模糊定位看看

  

  咦,可以看出來dd里面的內(nèi)容都出來了,但是前面12章的內(nèi)容不是我們需要的,我們要的是從第一章開始,所以需要把它們過濾掉,position是一個(gè)定位的函數(shù),大于12是說從第13位開始,也就是第一章

  

  這數(shù)據(jù)正好是我們想要提取的文字,所以我們已經(jīng)得到了文字提取的XPath字串://*[@id="list"]/dl/dd[position()>12]/a

  文字和鏈接都在a標(biāo)簽里面,鏈接在href屬性里面,所以鏈接的XPath字串://*[@id="list"]/dl/dd[position()>12]/a/@href

  

  好了,前面是在分析XPath字串是怎么得到的,如果自己對(duì)XPath語法熟的話,也可以自己寫提取字串,然后用插件去驗(yàn)證,或者直接用代碼驗(yàn)證都是可以的。現(xiàn)在我們把它放到代碼中去

   # 獲取a標(biāo)簽對(duì)象
    chapter_titles_obj = datas.xpath('//*[@id="list"]/dl/dd[position()>12]/a')
    for chapter_title_obj in chapter_titles_obj:
        # 獲取a標(biāo)簽文本
        chapter_title_text = chapter_title_obj.xpath('./text()')[0]
        # 獲取a標(biāo)簽的鏈接
        chapter_url = chapter_title_obj.xpath('./@href')[0]

打印出來看看結(jié)果

c. 每個(gè)章節(jié)的鏈接都拿到了,接下來就是請(qǐng)求了,這個(gè)不多說,和上面請(qǐng)求的方法一樣,XPath獲取方法也相同。

d. 存儲(chǔ)獲取到的數(shù)據(jù)

        for content_chapter_text in content_chapter:
            print(content_chapter_text)
            with open("魔道祖師/" + chapter_title_text + ".txt", 'a', encoding='utf-8') as f:
                f.write(content_chapter_text)

這樣,一篇小說從訪問到下載的過程就結(jié)束了。

完整代碼

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File    : six-dialog_design -> qianqian.py
@IDE     : PyCharm
@Author  : zihan
@Date    : 2020/5/25 14:50
@Desc    :
================================================="""
import requests
from lxml import etree


headers = {
    'User-Agent': ""
}


def main():
    url = "https://www.qqxsnew.com/18/18991/"
    html = requests.get(url, headers=headers).text
    datas = etree.HTML(html)
    chapter_titles_obj = datas.xpath('//*[@id="list"]/dl/dd[position()>12]/a')
    for chapter_title_obj in chapter_titles_obj:
        chapter_title_text = chapter_title_obj.xpath('./text()')[0]
        chapter_url = chapter_title_obj.xpath('./@href')[0]
        chapter_url = "https://www.qqxsnew.com" + chapter_url

        # 對(duì)每一章的鏈接發(fā)送請(qǐng)求
        html_chapter = requests.get(chapter_url, headers=headers).text
        datas_chapter = etree.HTML(html_chapter)
        content_chapter = datas_chapter.xpath('//*[@id="content"]/text()')
        print(chapter_title_text, "開始下載")
        for content_chapter_text in content_chapter:
            print(content_chapter_text)
            with open("魔道祖師/" + chapter_title_text + ".txt", 'a', encoding='utf-8') as f:
                f.write(content_chapter_text)


if __name__ == '__main__':
    main()

View Code

OK。如果想要批量下載,或者選擇下載等,只是改變url而已,了解主體方法后,這些都不難。

總結(jié)

以上是生活随笔為你收集整理的爬取千千小说 -- xpath的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。