准备好模块
由于信息多种多样, 这里以资讯新闻信息为例, 以 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]
来源: https://blog.csdn.net/guxiaowa/article/details/82950886