欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

爬虫-数据解析1

时间:2023-04-24
爬虫-数据解析1

1、数据解析原理概述2、数据解析--正则表达式

【注】图片响应数据应该用**requests.get(url=url).content**来实现,返回的是一组二进制图片数据 3、数据解析--bs44、爬虫小案例 1、数据解析原理概述

- 解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储- 1、进行指定标签的定位- 2、标签或者标签对应的属性中存储的数据值进行提取(解析)

2、数据解析–正则表达式 【注】图片响应数据应该用requests.get(url=url).content来实现,返回的是一组二进制图片数据

# 需求:爬取糗事百科中糗图板块下所有的糗图图片import requestsimport reimport osif __name__ == "__main__": # 创建一个文件夹,保存所有图片 if not os.path.exists('./img_all'): os.mkdir('./img_all') # 先爬取整个页面 url = "https://www.qiushibaike.com/" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0' } # 先对通用爬虫对一整张页面进行爬取 page_text = requests.get(url=url, headers=headers).text # 将页面中所有的图片进行聚焦提取 # 正则 (.*?)括号里的即时提取的数据 ex = '.*? img_src_list = re.findall(ex, page_text, re.S) # print(img_src_list) # 对列表进行遍历 for src in img_src_list: # 拼接完整的url src = 'https:' + src img_data = requests.get(url=src, headers=headers).content # 生成图片名称 img_name = src.split('/')[-1] # 路径 img_path = './img_all/' + img_name with open(img_path, 'wb') as fp: fp.write(img_data)

3、数据解析–bs4

- 1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中- 2、通过调用BeautifulSoup对象中的相关的属性或者方法进行标签定位和数据提取

pip install bs4pip install lxml

对象的实例化-- 1、将本地的html文档中的数据加载到该对象中 fp = open('./test.html', 'r', encoding='UTF-8') soup = BeautifulSoup(fp, 'lxml')-- 2、将互联网获取到的页面源码加载到该对象中page_text = response.textsoup = BeautifulSoup(page_text, 'lxml')- 提供的用于数据解析的方法和属性:- soup.tagName: 返回的是文档中第一次出现的tagName对应的标签- soup.find():# find出来的直接是一堆标签,而不是select用数组包裹的标签- find('div'):等同于soup.div- 属性定位:soup.find('div', class_='song')# 寻找带class为song的div- soup.find_all('div'): 返回所有的div标签- select# 选择出来的是含有标签的数组- soup.select('')# 里面可以写选择器,比如说id选择器#id,返回的是一整个- 层级选择器- soup.select('.tang > ul > li > a')[0] # 表示class=tang里的ul标签里的li标签里面的第一个a标签- 获取标签之间的文本数据:- soup.a.text/get_text()# 获得标签下的所有内容- soup.a.string# 获得标签下面的直系文本内容- 获取标签的属性值:- soup.select('.tang > ul > li > a')[0]['herf']# 获取herf属性值

4、爬虫小案例

# 需求:爬取三国演义小说所有的章节标题和章节内容import requestsfrom bs4 import BeautifulSoupimport osif __name__ == "__main__": if not os.path.exists('./sanguoyanyi'): os.mkdir('./sanguoyanyi') url = "https://www.shicimingju.com/book/sanguoyanyi.html" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0' } page_text = requests.get(url=url, headers=headers) # 爬取的时候可能出现乱码,更改编码 page_text.encoding = 'UTF-8' soup = BeautifulSoup(page_text.text, 'lxml') # 解析章节标题 for li in soup.select('.book-mulu > ul > li'): title = li.a.string detail_url = 'https://www.shicimingju.com' + li.a['href'] # 对详情页发起请求 detail_page_text = requests.get(url=detail_url, headers=headers) detail_page_text.encoding = 'UTF-8' detail_soup = BeautifulSoup(detail_page_text.text, 'lxml') div_tag = detail_soup.find('div', class_='chapter_content') # 获取了文章内容 content = div_tag.text # 存储 path = './sanguoyanyi/' + title + '.txt' with open(path, 'w', encoding='UTF-8') as fp: fp.write(content) fp.close()

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。