上一篇文章我们爬取到了一整页的HTML代码,但是要从茫茫代码中找我们想要得到的那部分,无疑于大海捞针,今天的目标是爬取这一页HTML中所有的蔬菜名称、发布时间和地址。What? 你觉得人工做也很简单?来来来,感受下被代码支配的恐怖!
当我看到这仅仅是冰山一角时,此刻的我
真希望我的盖世英雄能踩着七彩祥云来救我
哎,坚强的孩子通常都是要自我拯救!
那么要从这么多的代码中获得我们需要的那部分数据,就需要用到在python中,内嵌集成的re模块,直接调用该模块来实现正则匹配,从而实现将需要的数据从繁复的代码中解放出来,实现他们应有的价值。
从这张代码中我们注意到每条我们获取数据周围的HTML格式代码都是相同的,唯一不同的是数据所包含的信息,那么我们可以以这些格式代码为锚点,重复遍历各个子锚点之间的信息,以正则表达式获得这些数据,并存储在相应数组中。锚点代码如下图:
什么是
正则表达式呢?
官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
ANYWAY?是不是一头雾水,教你一招爬虫专用简单易学的正则表达式。
首先,你要知道,正则表达式是用程序明白的语言去检索,那么我们的目的是去检索所有红框标注格式下数据。本例我们使用爬虫比较通用的一种办法,.*?来表示检索所有不同的字符:相同部分我们就以正常代码形式展现,不同部分如果不是要爬取的那部分,就用.*?,需要爬取的部分就用(.*?)。
例如:
广西地区威廉斯香蕉,量大供应中
威廉斯
2018-10- 4广西区崇左市
那么改写成:
.*?
(.*?)
(.*?)(.*?)
在使用RE模块的compile函数,将正则表达式的字符串形式编译为Pattern实例。
pattern = re.compile(r'.*?
(.*?)
(.*?)(.*?)
',re.S)
最后在通过 re.findall函数使用pattern实例在HTML内容中进行检索,抓取到内容并放在数组items 中。
items = re.findall(pattern, page)
这个RE模块的函数实在是
这样一个简单的爬虫就完成了,有没有一种so easy的感觉。更多技术小TIPS,尽在金融科技应用学院,多多关注~
领取专属 10元无门槛券
私享最新 技术干货