python爬蟲三大解析資料方法:bs4 及爬小說網案例
阿新 • • 發佈:2018-11-17
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')