1. 程式人生 > >python爬蟲三大解析資料方法:bs4 及爬小說網案例

python爬蟲三大解析資料方法:bs4 及爬小說網案例

bs4 python獨有可以將html文件轉成bs物件,可以直接呼叫bs物件的屬性進行解析

安裝

pip install bs4

  • 本地html Beautiful(“open(‘路徑’)”,‘lxml’)
  • 網路html Beautiful(‘網路資料’, ‘lxml’)

常用屬性和方法

class_='class避免系統衝突加 _'!!!

from bs4 import BeautifulSoup

fp = open('本地.html')
soup = BeautifulSoup(fp, 'lxml')

# 標籤名查詢
print(soup.div) # 只能找到第一個 # 獲取標籤的屬性 print(soup.a.atters) # 取a標籤的所有屬性 print(soup.a.atters['href']) # 取a標籤的href屬性值 # 取內容 print(soup.p.string) # 取當前標籤的文字內容 print(soup.p.text) # 標籤下所有子文字內容 print(soup.p.get_text) # find查詢符合要求的第一個標籤! print(soup.find('a', class_='class避免系統衝突加 _')) print(soup.find(
'a', id='XX')) # find_all 同find 返回列表 print(soup.find_All('a')) print(soup.find_All('a', limit=2)) # 只取前兩個 # 選擇器 >表示下面一級 print(soup.select('div > img')[0]) # div下直系img標籤 print(soup.select('div img')[0]) # 空格可以表示多個層級

bs4爬小說網指定小說標題及內容

from bs4 import BeautifulSoup
import requests

url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', } def get_content(get_url): """獲取章節內容""" content_data = requests.get(url=get_url, headers=headers).text soup_content = BeautifulSoup(content_data, 'lxml') div = soup_content.find('div', class_='chapter_content') con = div.text return con data = requests.get(url=url, headers=headers).text soup = BeautifulSoup(data, 'lxml') # 取到 a標籤物件()物件還可以繼續呼叫 包含章節名和連結 a_list = soup.select('.book-mulu > ul > li > a') with open('./三國演義.txt', 'w', encoding='utf-8') as f: for a in a_list: title = a.string content_url = a.attrs['href'] # 取a中的href屬性 content_url = 'http://www.shicimingju.com' + content_url content = get_content(content_url) f.write(title+':'+content+'\n\n\n\n')