爬虫 正则小记
用正则做爬虫的三个步骤:
- 向请求的页面发送请求,获取源代码(静态页面)
- 利用正则匹配数据
- 将数据保存到数据库
实例:
string = """ <html> <div><a href='www.baidu.com'></a></div></div></div> </div><title>正则</title></div> <html><div><a href='www.baidu1.com'></a></div> </div></div></div><title>正则1</title></div> <html><div><a href='www.baidu2.com'></a> </div></div></div></div><title>正则2</title></div> <html><div><a href='www.baidu3.com'> </a></div></div></div></div><title>正则3</title></div>"""这里直接把网页HTML保存在字符串中用正则匹配
1. 用正则获取整个页面的网址(href)以及标签title中的文本内容:
pattern = re.compile(r"<a href='(.*?)'>.*?<title>(.*?)</title>", re.S)
res = re.findall(pattern, string) print(res)
结果为:[('www.baidu.com', '正则'), ('www.baidu1.com', '正则1'), ('www.baidu2.com', '正则2'), ('www.baidu3.com', '正则3')]
2. 解析:.*? 非贪婪匹配 .*贪婪匹配
区别:string = "a12345b0000b0000b"
a.*?b = a12345b (非贪婪默认取第一个a-b之间的值, 故而非贪婪)
a.*b = a12345b0000b0000b(贪婪有多少取多少只要在一个标签或者字符串中故而贪婪)
3. 在正则中所取的需要放在()中
4. re.S 可以将正则的搜索域不在限定在一行,而是整个HTML 全局提取所需
5. findall() 返回的是一个列表