python用beautiful对爬取的网络信息进行信息筛选与信息提取

准备好模块

由于信息多种多样,这里以资讯新闻信息为例,以beautifulsoup为主re和xpath为辅,分享一下我这几天的挑选信息的方法。
python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 调用beautifulsoup
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html_text, ‘html.parser’)

  • 调用正则
    import re

  • 调用xpath
    from lxml import etree

    注意,此处省略如何获取整版网址的信息,信息内容如下
    html_text = spider(url)

分析大多数新闻资讯的结构

分析界面,寻找代码

文章结构体在哪(浏览器按f12,选中相应的位置,锁定代码块):
python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 大多数新闻使用article标签来存放新闻,这个标签含有上图的所有信息
    get_news = soup.find_all(‘article’)

python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 也可以是含有某个特定属性的div标签
    soup.find_all(‘div’, {‘class’: ‘某个特点属性’})
    注意该标签和属性能把文章的所有内容都涵盖,因为前端在处理文章时也是做了代码块限定的

在找到的模块中进行具体信息提取

python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 像上图这种标签是递归的,没有其他断点的,就可以直接获取信息
    • 获取本标签某属性的值
      get_news[0].header.h2.a.attrs[‘href’]
    • 获取本标签的文本信息
      get_news[0].div.p.text

python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 获取这种本结构独一无二的标签最简单
    n_detail = get_news[0].div.p.text
    python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 获取这种中有其他我们不想要的信息时,可以用正则进行再加工处理
    n_time = re.finditer(’(.*?)T’, (get_news[n].find(‘time’).attrs[‘datetime’]))
    python用beautiful对爬取的网络信息进行信息筛选与信息提取

  • 获取这种自己想要的内容不在标签里面的情况
    etree.HTML(str(get_news[n].find(‘div’,{‘class’:‘特定属性’}))).xpath(’//div[@class=“特定属性”]/text()’)[0]