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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Reptile:requests + BeautifulSopu 实现古诗词网三国名著下载

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reptile:requests + BeautifulSopu 实现古诗词网三国名著下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019/1/25凌晨?路飛學城爬蟲課程,requests + BeautifulSoup?庫實現中國古詩詞網站名著《三國演義》的下載

BeautifulSoup?庫是一種常用的網頁解析庫,可以對網頁數據進行解析得到自己想要的數據,一下為基礎方法:

屬性和方法:

soup = BeautifulSoup(響應對象文本html,‘lxml')

1.根據標簽名進行查找:

  -soup.a?對對象中的a標簽進行查找,只能返回找到的第一個

2.?獲取屬性:

  - soup.a.attrs?獲取a?標簽下所有的屬性值,對應找到的第一個標簽下所有的屬性值,返回一個字典類型

  - soup.a.attrs['href']?獲取a標簽下指定的href屬性值

  - soup.a['href']?作用同上 (簡寫方式,常用)

3.?獲取內容:

  - soup.a.string?獲取a標簽的直屬文本,也就是只能獲取a標簽本身的文本內容,再下一級的就獲取不到了

  - soup.a.text?獲取a標簽下的所有內容,獲取a標簽及其下級標簽的文本內容

  - soup.a.get_text()?效果同上,具體差異不清楚

4. find:?找到第一個符合要求的標簽

  - suop.find('a')?找到第一個符合要求的a標簽并返回

  - soup.find('a', title='xxx')?可以指定標簽的屬性,同上也是返回找到的第一個

  可以作用到屬性,類、ID等

5. findAll:找到所有符合要求的標簽 (A?不可小寫,小寫會報錯)

  - soup.findAll('a')?找到對象中所有的a標簽并返回一個列表

  - soup.findAll('a','b')?找到對象中所有的a和b標簽

  - soup.findAll('a', title='xxx')?找到對象中所有符合要求的a標簽

6.根據選擇器選擇指定的內容

  - soup.select()?適用與對css選擇器比較熟悉的,雖然我不熟悉,但是我覺得這個很好用啊

  - soup.select('.xxx li')?表示某個標簽下的所有的a標簽

7.還有子、子孫,父、祖先,兄弟節點等

  - soup.a.contents?獲取a標簽下所有的子節點,子節點的子節點獲取不了

  - soup.a.children?獲取a標簽下的所有的節點。

  -?soup.a.descendants?獲取a標簽下的所有的子節點對應的子節點

  -?soup.a.parent?獲取a標簽的父級節點

  -?soup.a.parents?獲取a標簽的所有的上級節點直到文檔的最頂層

  -?soup.a.next_siblings?獲取a標簽的下一個兄弟節點(平行節點?)這個我到現在都沒有搞明白

  ?soup.a.previous siblings?獲取a標簽的上一個兄弟節點(平行節點?)同上這個我還是沒有搞明白

?

需求:獲取古詩詞網的名著數據,并寫入

標題也就是章節名和對應的內容不是在一個URL下的,所以要先解析出標題和標題內的URL,再對URL再次發起請求獲取對應的內容

# -*- coding: utf-8 -*- # ------ wei、yu ------# 需求:爬取詩詞名句網的歷史典籍全部import requests from bs4 import BeautifulSoup import os import time import random# 生成文件目錄 if not os.path.exists('./History Books'):os.mkdir("History Books")def _book_list(url):book_list_response = requests.get(url=url, headers=headers)if book_list_response.status_code == 200:book_list_text = book_list_response.text# 調用Beautiful解析出書名列表,和書名對應的urlsoup = BeautifulSoup(book_list_text, 'lxml')bookInfo = soup.select('.bookmark-list a')book_list_response.close()return bookInfoelse:print('內容數據請求失敗,請重新嘗試')exit()def _title_list(url):title_list_response = requests.get(url=url, headers=headers)if title_list_response.status_code == 200:title_list_text = title_list_response.text# 調用Beautiful解析出章節列表和章節對應的內容urlsoup = BeautifulSoup(title_list_text, 'lxml')titleList = soup.select('.book-mulu a')title_list_response.close()return titleListelse:print('內容數據請求失敗,請重新嘗試')exit()def _content(url):content_response = requests.get(url=url, headers=headers)if content_response.status_code == 200:content_text = content_response.text# 調用Beautiful解析出章節對應的內容soup = BeautifulSoup(content_text, 'lxml')content1 = soup.find('div', class_='chapter_content')content_response.close()return content1.get_text()else:print('內容數據請求失敗,請重新嘗試')exit()# 指定url和請求頭參數 home_page_url = 'http://www.shicimingju.com/book/' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/65.0.3325.181 Safari/537.36' } while 1:try:# 首先調用_book_list對首頁鏈接發起請求,獲得返回的書名列表booklists = _book_list(home_page_url)# 獲取書名和書名對應的完整urlfor info in booklists:bookName = info.string # 書名bookUrl = 'http://www.shicimingju.com' + info['href'] # 書名對應的完整url# 生成書名對應的文件句柄,每本書生成一個文件fileInfo = "History Books/" + str(bookName) + '.txt'fp = open(fileInfo, 'w', encoding='utf-8')for i in range(random.randint(0, 5)):print('\033[1;34m 數據請求中.....\033[m')time.sleep(0.2)print('\033[1;31m 數據請求成功,開始下載.....\033[m')time.sleep(0.2)# 接下來調用_title_list對書名對應的url發起請求,獲得返回的章節標題titlelists = _title_list(bookUrl)# 獲取章節名稱和章節對應的完整urlfor title in titlelists:titleName = title.string # 章節名稱titleUrl = 'http://www.shicimingju.com' + title['href'] # 章節對應的完整url# 接下來調用 _content 對章節對應的url發起請求,獲得返回的內容數據content = _content(titleUrl)try:fp.write(titleName + "" + content + '\n\n')print('\033[34m %s \033[m \033[31m %s \033[m 寫入完成..' % (bookName, titleName))time.sleep(0.1)except:print('\n \033[1;31m 數據寫入異常,跳過.. \033[m \n')print('\033[1;31m 重新嘗試接入.. \033[m')time.sleep(2)fp.close()exit('獲取完成,程序結束')except:print('\n 10053 錯誤! \n ') # 這里不知道為什么會報一個10053的錯誤,網上搜索了一下看說是網絡問題還是啥的,沒有解決,這樣循環會出現一旦報錯就會重寫全部文件,很麻煩,一開始在公司測試的時候沒有什么問題,在家的時候才出現的continue

?

轉載于:https://www.cnblogs.com/wei-yu/p/10319123.html

總結

以上是生活随笔為你收集整理的Reptile:requests + BeautifulSopu 实现古诗词网三国名著下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。