爬虫之数据解析

  数据解析,是实现聚焦爬虫的核心技术,在一张页面源码中提取指定的文本内容。数据解析的通用原理:要提取解析的数据都是存储在标签中间或者标签的属性中

解析方式一: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)
View Code

解析方式二: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")
View Code

 

相关属性和方法:

根据标签名查找
      (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对象,把即将被解析的页面源码加载到该对象中;调用etree对象中的xpath方法,结合不同形式的xpath表达式实现标签定位和数据的提取

 

posted @ 2019-07-09 10:10  DF-包子  阅读(195)  评论(0)    收藏  举报