AHuqihua 2020-06-14
在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样
而在python中可以通过正则表达式去筛选自己想要的数据
1.首先分析页面内容信息,确定正则表达式。例如想获取下面这些内容的链接
可以通过筛选出符合<li><a href="xxx"的内容,获取到href中的链接,设置正则:reg = r‘<li><a href="(.+?)"‘去筛选数据就OK了;
2.在python中用正则表达式去筛选数据,在python中有两种方法实现:
第一种:
reg = r‘<li><a href="(.+?)"‘ hrefreg = re.compile(reg) hreflist = hrefreg.findall(html)
第二种:
reg = r‘<li><a href="(.+?)"‘ hreflist = re.findall(reg, html)
这两种方法都能实现数据的筛选,他们的区别主要是:是否使用re.compile()。这个实际影响到的是大数据量级时的性能,目前仅作了解。
另外,关于正则学习的内容可以参考这里:https://www.runoob.com/regexp/regexp-tutorial.html
最后是简单的筛选href内容的代码和结果,结果里看出有些href内容并不是http链接,这个时候可以做二次处理。例如,判断是否包含"http"字符串等:
import re import urllib.request # 设置headers和URL url = "https://news.baidu.com/" headers = {‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0‘} req = urllib.request.Request(url=url, headers=headers) # 请求指定URL,获取内容 html = urllib.request.urlopen(req).read().decode(‘UTF-8‘, ‘ignore‘) #筛选出href内容并打印 reg = r‘<li><a href="(.+?)"‘ hreflist = re.findall(reg, html) for href in hreflist: print(href)