学习了基于bs4聚焦爬虫:bs4比较局限只能是python使用。个人感觉不是很好使用。
bs4数据解析原理:1、实例化一个beautifulSoup对象,并且将页面源码加载到该对象中
2、通过beautifulSoup对象中的相关属性或者方法进行标签定位和数据提取
下面是我的测试代码和BeautifulSoup对象的一些常用方法。
if __name__ == '__main__': fp = open('./guge.html', 'r', encoding='utf-8') soup = BeautifulSoup(fp, 'lxml') # 第一次所出现的标签 soup.tagname soup.a相当于soup.find('a') # print(soup.a) # soup.find('a', class_='song')的属性定位 # soup.findAll()返回值是一个列表,里面的内容是所有要查找的所有标签 # print(soup.findAll('a')) # soup.select('某种选择器id,class等') 选择器 返回值是一个列表 # soup.select也可以用于层级定位 >表示一个层级 空格表示多个层级 # print(soup.select('ul > li > a')) # print(soup.select('ul a')) # 获取标签内容.text/get_text() 获取一个标签下的所有内容,string 该标签下的内容 # print(soup.find('ul').string) # 标签中的属性值 # print(soup.a['href'])
这是我做的一个基于bs4爬取三国演义小说:
# 爬取三国演义所有的标题和章节内容 import requests from bs4 import BeautifulSoup if __name__ == '__main__': url = 'https://www.shicimingju.com/book/sanguoyanyi.html' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0' } resp = requests.get(url=url,headers=headers) resp.encoding = 'utf-8' nameobj = resp.text soup = BeautifulSoup(nameobj,'lxml') # print(soup.select('.book-mulu a')) # 选出来的所有a标签列表 zhang_lable = soup.select('.book-mulu a') # print(zhang_lable) fp = open('D:StudyPythonscrapysanguo.html','w',encoding='utf-8') for i in zhang_lable: # 获取章节名 name = i.text # 获取章节内容地址 url_href = 'https://www.shicimingju.com'+i['href'] resp1 = requests.get(url=url_href,headers=headers) resp1.encoding = 'utf-8' text = resp1.text soup_neirong = BeautifulSoup(text,'lxml') # print(soup_neirong.find('div',class_='chapter_content').get_text()) neirong = soup_neirong.find('div',class_='chapter_content').get_text() fp.write(name+':'+neirong+' ') print(name+'爬取成功!') fp.close() print('三国演义爬取完成')