准备好模块
由于信息多种多样,这里以资讯新闻信息为例,以beautifulsoup为主re和xpath为辅,分享一下我这几天的挑选信息的方法。
-
调用beautifulsoup
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_text, ‘html.parser’) -
调用正则
import re -
调用xpath
from lxml import etree注意,此处省略如何获取整版网址的信息,信息内容如下
html_text = spider(url)
分析大多数新闻资讯的结构
分析界面,寻找代码
文章结构体在哪(浏览器按f12,选中相应的位置,锁定代码块):
- 大多数新闻使用article标签来存放新闻,这个标签含有上图的所有信息
get_news = soup.find_all(‘article’)
- 也可以是含有某个特定属性的div标签
soup.find_all(‘div’, {‘class’: ‘某个特点属性’})
注意该标签和属性能把文章的所有内容都涵盖,因为前端在处理文章时也是做了代码块限定的
在找到的模块中进行具体信息提取
- 像上图这种标签是递归的,没有其他断点的,就可以直接获取信息
- 获取本标签某属性的值
get_news[0].header.h2.a.attrs[‘href’] - 获取本标签的文本信息
get_news[0].div.p.text
- 获取本标签某属性的值
-
获取这种本结构独一无二的标签最简单
n_detail = get_news[0].div.p.text
-
获取这种中有其他我们不想要的信息时,可以用正则进行再加工处理
n_time = re.finditer(’(.*?)T’, (get_news[n].find(‘time’).attrs[‘datetime’]))
-
获取这种自己想要的内容不在标签里面的情况
etree.HTML(str(get_news[n].find(‘div’,{‘class’:‘特定属性’}))).xpath(’//div[@class=“特定属性”]/text()’)[0]