爬虫之数据解析
数据解析,是实现聚焦爬虫的核心技术,在一张页面源码中提取指定的文本内容。数据解析的通用原理:要提取解析的数据都是存储在标签中间或者标签的属性中
解析方式一:re
需要设置一个通用的url模板,是不可变的
import requests import re import os # 指定url url = "https://www.qiushibaike.com/pic/" # UA伪装 headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' } # 发起请求,获取页面数据 page_text = requests.get(url=url, headers=headers).text # 获取图片链接列表 img_list = re.findall(re表达式,page_text,re.S)
解析方式二:bs4
解析原理:
实例化一个Beautifulsoup对象,并把即将被解析的页面源码数据加载到该对象中,需要调用bs对象中的相关属性和方法进行标签定位和数据的提取。
使用流程:
导入bs4模块:from bs4 import BeautifulSoup,同时也需要安装解析器lxml
使用方式:可以将一个html文档转化为BeautifulSoup对象,然后通过对象的方法或属性查找指定的节点内容
# 将本地存储的一张html页面中的页面源码加载到bs对象中 BeautifulSoup(open("bendi"), "lxml") # 将互联网请求到的页面源码数据加载到bs对象中 page_text = request.get(url, headers).text BeautifulSoup(page_text, "lxml")
相关属性和方法:
根据标签名查找 (1) - soup.tagName 只能找到第一个符合要求的标签 (2) 获取属性 - soup.a.attrs 获取a所有的属性和属性值,返回一个字典 - soup.a.attrs['href'] 获取href属性 - soup.a['href'] 也可简写为这种形式 (3) 获取内容 - soup.a.string # 该标签下的直属文本 - soup.a.text # 该标签下的所有文本内容 - soup.a.get_text() # 该标签下的所有文本内容 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容 (4) find:找到第一个符合要求的标签 - soup.find('a') 找到第一个符合要求的 - soup.find('a', title="xxx") - soup.find('a', alt="xxx") - soup.find('a', class_="xxx") - soup.find('a', id="xxx") (5)find_all:找到所有符合要求的标签 - soup.find_all('a') - soup.find_all(['a','b']) 找到所有的a和b标签 - soup.find_all('a', limit=2) 限制前两个 (6)根据选择器选择指定的内容 select:soup.select('#feng') - 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器 - 层级选择器: div .dudu #lala .meme .xixi 下面好多级 div > p > a > .lala 只能是下面一级 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象
解析方式三:xpath
解析原理:
调用etree对象中的xpath方法,结合不同形式的xpath表达式实现标签定位和数据的提取

浙公网安备 33010602011771号