实践目的:利用bs4通过标签,属性,类的解析进行对文章内容的爬取
首先在书介绍的网站上找到每一章节的href连接
href在 class=book dl的标签下.
第一步:实例化一个soup对象
import requests import os from bs4 import BeautifulSoup url0='https://www.shicimingjv.com/bookindex/96.html' headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.24' } page_text=requests.get(url0,headers=headers).text soup=BeautifulSoup(page_text,'lxml')#soup对象需要对response的text文本内容进行创造
利用soup的方法select方法对每一章节进行搜所
soup.select("css选择方法")
所以在此处要找到class=book-tags下面的一个个li标签 select会返回一个列表,每个列表种应该也是一个对象
如果想跨标签寻找 可以把>换成 空格 就不用一层层去找到所需标签
mulu_list=soup.select('.book-tags > li')
对li标签内容进行解析,获得href属性和title属性
文章连接,标题都在a标签种,用标签对象.a获取标签种的a标签 有href属性和 title属性
先通过循环的到每一个li标签,然后通过['herf'] 和 ['title']来获得内容
当然也可以用li.a.text获得当前标签下层的所有文本内容
for i in mulu_list: title=i.a['title'] href=i.a['href']
套娃对href连接进行get请求获得文章内容
if os.path.isdir('./爬取的小文章'): pass else: os.mkdir('./', '爬取的小文章') for part in mulu_list: url1=part.a['href'] title=part.a['title'] detail_text=requests.get(url1,headers=headers).text detail_soup=BeautifulSoup(detail_text,'lxml') content_tag=detail_soup.find('p',class_='noindent') content=content_tag.text filename=title+'.txt' with open(f'./爬取的小文章/{filename}', 'w+', encoding='utf-8') as fp: fp.write(content) print(f"{filename} 已经爬取成功")