今日、私はBeautifulsoupを使用して、http://www.shicimingju.com/book/sanguoyanyi.htmlでロマンスオブザスリーキングダムの小説のコンテンツをクロールしました。
-bs4データ分析の原則:-1。BeautifulSoupを インスタンス化し、ページソースデータをオブジェクトにロードします 。- 2。BeautifulSoupオブジェクトの関連する属性またはメソッドを呼び出してラベルの配置とデータ抽出を実行します。- environmentinstallation- pip install bs4 -pip install lxml(これはパーサーであり、bs4とxpathの両方が使用さ れます) -BeautifulSoupオブジェクトをインスタンス化する方法:bs4からimport BeautifulSoup-オブジェクトの インスタンス化-1 。ローカルhtmlドキュメントのデータをオブジェクト #willにロードします。ローカルhtmlドキュメントのデータをこのオブジェクトにロードします fp = open( './ text.html'、 'r'、encoding = 'utf-8') soup = BeautifulSoup(fp、 'lxml') -2。インターネットで取得したページのソースコードは、オブジェクトにロードされます page_text = response.text soup = Beatifulsoup(page_text、 'lxml') データ分析用に提供されたと属性: -メソッド -soup.tagName:返されるのは、ドキュメントに初めて表示されるtagName(div、aなど)に対応するタグです。 -soup.find():-find( 'tagName'):soup.tagNameと同等-属性の 配置: -soup.find( 'div'、class_(タグが記述されている場合は下線を引く)= 'song')- soup。 find_all( 'tagName'):要件を満たすすべてのタグを返します(リスト) -select: -soup.select( '特定のセレクター(id、クラス、タグ...セレクター)+タグ')、返されますリスト レベルのselector-soup.select ( '。tang> ul> li> a')[0]:>はレベルを示し、レベルselector-soup.select ( '。tang> ul a'):スペース複数のレベルを表し、ulとaの間のliタグはスペースで表され ます-タグ間のテキストデータを取得します- タグが配置されている場合(soup.a.text / string / get_textなど)、対応するテキストデータを取得します soup.select( ' .tang> ul a ')[0]。string -textおよびget_textは、ラベル内のすべてのテキストコンテンツを取得できます -文字 列は、ラベルの直下のテキストデータのみを取得できます。-ラベルの属性値を取得します。 -soup.a['herf']
もう1つの重要なポイント:ラベル名は正しく書かれている必要があります!!!!!
以下のコードについて言うことはあまりありません。
import requests
from bs4 import BeautifulSoup
if __name__=='__main__':
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36'
}
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
page_text = requests.get(url=url,headers=headers).text
print(page_text)
#在首页中解析出章节的标题和详情页的url
#1.实例化对象,需要将页面源码数据加载到该对象中
soup = BeautifulSoup(page_text,'lxml')
#解析章节标题和详情页url
li_list = soup.select('.book-mulu >ul >li')
fp = open('./sanguo.text','w',encoding='utf-8')
for li in li_list:
title = li.a.string
detail_url = 'http://www.shicimingju.com'+li.a['href']
#对详情页发起请求,解析出章节内容
detail_page_text = requests.get(url=detail_url,headers=headers).text
#解析出详情页相关的章节内容
detail_soup = BeautifulSoup(detail_page_text,'lxml')
div_tag = detail_soup.find('div',class_='chapter_content')
content = div_tag.text
fp.write(title+':'+content+'\n')
print(title,'爬取成功!!!')
結果は上の写真にあります。