久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Pyhon爬蟲下載小說

 碼農(nóng)9527 2021-10-22

    本節(jié)通過具體的爬蟲程序,,演示BS4解析庫的實(shí)際應(yīng)用,。爬蟲程序目標(biāo):下載詩詞名句網(wǎng)(https://www.shicimingju.com/book/)《兩晉演義》小說。

    關(guān)于分析網(wǎng)頁分過程,這里不再做詳細(xì)介紹了,只要通讀了前面的文章,那么關(guān)于如何分析網(wǎng)頁,,此時(shí)您應(yīng)該了然于胸了。其實(shí),,無論您爬取什么類型的網(wǎng)站,,分析過程總是相似的。

    案例簡單分析

    首先判網(wǎng)站屬于靜態(tài)網(wǎng)站,,因此您的主要任務(wù)是分析網(wǎng)頁元素的組成,,然后使用BS4提取所需的信息。如下所示:

    提取到a標(biāo)簽是解決本程序的重點(diǎn),,a標(biāo)簽的頁面代碼結(jié)構(gòu)如下所示:

<div class="book-mulu">
<ul>
  <li><a href="/book/liangjinyanyi/1.html">自序</a></li>
  <li><a href="/book/liangjinyanyi/2.html">第一回 祀南郊司馬開基 立東宮庸雛伏禍</a></li>
  <li><a href="/book/liangjinyanyi/3.html">第二回 墮詭計(jì)儲(chǔ)君納婦 慰癡情少女偷香</a></li>
...123456復(fù)制代碼類型:[python]

    從上述代碼可以看出,,a標(biāo)簽包含了目錄名稱以及詳情頁的地址鏈接。那么如何獲取a標(biāo)簽?zāi)???jīng)過簡單分析后可知a標(biāo)簽屬于div>ul>li的子節(jié)點(diǎn),,因此可以使用BS4的select()獲取。如下所示:

list_name = soup.select('.book-mulu > ul > li > a')1復(fù)制代碼類型:[python]

    上述代碼的返回值是一個(gè)列表,,列表中每一個(gè)元素都是一個(gè)Tag對象,,類型為<class'bs4.element.Tag'>。

    下載詳情頁的URL也非常容易獲得,,它是由發(fā)起請求的URL與a標(biāo)簽的herf鏈接拼接而成,。因此通過字符串拼接就可以獲取下載詳內(nèi)容頁的URL,。

https://www.shicimingju.com/book/liangjinyanyi/2.html
https://www.shicimingju.com/book/liangjinyanyi/3.html12復(fù)制代碼類型:[python]

    最后一步是提取具體的內(nèi)容。通過分析詳情頁的元素構(gòu)成可知,,我們想要的內(nèi)容都包含在以下標(biāo)簽中:

<div class="chapter_content">
具體內(nèi)容
</div>123復(fù)制代碼類型:[python]

    因此使用BS4的find()方法就可以獲取所需內(nèi)容,,如下所示:

artist = soup.find('div', class_='chapter_content')1復(fù)制代碼類型:[python]

    之后把獲取的內(nèi)容寫入到txt文件中就可以了。下面我使用之前學(xué)習(xí)過的urllib模塊與BS4模塊編寫爬蟲程序,,這樣才能做到溫故而知新,。

    編寫爬蟲程序

    代碼如下所示,程序中已經(jīng)做了詳細(xì)的注釋: 

import urllib.requestimport randomfrom bs4 import BeautifulSoupimport timedef request_html(url):
 headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'}
 request = urllib.request.Request(url, headers=headers) return requestdef parse_html(html, f):
 # 生成soup對象
 soup = BeautifulSoup(html, 'lxml') # 查找所有的章節(jié)鏈接和標(biāo)題內(nèi)容
 list_name = soup.select('.book-mulu > ul > li > a') # 遍歷每一個(gè)列表中的tag對象,,獲取鏈接個(gè)目錄
 for item in list_name:  # 獲取鏈接
  #item: <a href="/book/liangjinyanyi/1.html">自序</a>
  #拼接目錄鏈接,此處item類型為<class 'bs4.element.Tag'>,,使用下面方法可以值獲取href屬性值
  href = 'http://www.shicimingju.com' + item['href']  # 獲取標(biāo)題
  title = item.text
  print('正在下載:-**--%s--**-......' % title)  # 獲取章節(jié)內(nèi)容函數(shù)
  text = get_text(href)  # 寫入文件
  f.write(title + '\n' + text)
  print('結(jié)束下載:-**--%s--**-' % title)
  time.sleep(random.uniform(0,1))# 提取章節(jié)內(nèi)容def get_text(href):
 #創(chuàng)建請求對象
 request = request_html(href)
 content = urllib.request.urlopen(request).read().decode('utf8')
 soup = BeautifulSoup(content, 'lxml') # 查找包含內(nèi)容的tag--div
 artist = soup.find('div', class_='chapter_content') #獲取tag標(biāo)簽中的文本內(nèi)容
 return artist.textdef run():
 # 打開文件
 f = open('兩晉演義.txt', 'w', encoding='utf8')
 url = 'http://www.shicimingju.com/book/liangjinyanyi.html'
 # 構(gòu)建請求對象
 request = request_html(url) # 發(fā)送請求,得到響應(yīng),,轉(zhuǎn)換為HTML對象
 html = urllib.request.urlopen(request).read().decode('utf8') # 解析內(nèi)容
 parse_html(html,f) #關(guān)閉文件
 f.close()if __name__ == '__main__':
 run()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152復(fù)制代碼類型:[python]

    程序運(yùn)行結(jié)果:

正在下載:-**--自序--**-......
結(jié)束下載:-**--自序--**-
正在下載:-**--第一回 祀南郊司馬開基 立東宮庸雛伏禍--**-......
結(jié)束下載:-**--第一回 祀南郊司馬開基 立東宮庸雛伏禍--**-
正在下載:-**--第二回 墮詭計(jì)儲(chǔ)君納婦 慰癡情少女偷香--**-......
....

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多