php用正则表达抓取网页中文章(二是从网页中给出两种方法的具体操作用法-苏州安嘉)
优采云 发布时间: 2022-02-02 00:19php用正则表达抓取网页中文章(二是从网页中给出两种方法的具体操作用法-苏州安嘉)
爬虫主要有两个功能,一是访问网页,二是从网页中提取数据。其实访问一个网页基本上可以直接调用接口来完成,正确地从网页中提取数据是主要的工作量。
这里有两个用于提取数据的选项和使用的相关库。
先说一下这两种方法的特点:
Python正则表达式:速度很快,一个完整的html可以用一个简短的正则表达式来解决。但是有些html使用正则表达式得到的数据会比较混乱(多段符合正则表达式,但是有些数据不是我们想要提取的)。此外,下面的python库请求和重新推荐非常简单。
xpath:xpath对xml格式的东西解析比较规范,基本上可以取到自己想要的数据。但是要对xml格式有一个准确的理解。您可以使用 lxml 来解析 xml。
scrapy应该还有其他一些我不知道的爬虫优势,比如它的settings.py文件应该可以伪装浏览器信息等等,后面会研究。
下面给出这两种方法的具体操作:
1.python正则表达式:正则表达式语法规则参考
主要用到的函数是request.get()(请求网站)和re.findall()(正则表达式)
这是一个小功能
def extractDataOutPutList(RegExp,web):
content = re.findall(RegExp, web)
if content:
content = [re.sub(u'[ \n\r\t\u3000]+', ' ', re.sub(u'|\xa0', ' ', unescape(t))).strip() for t in content]
return content
[re.sub(u'[ \n\r\t\u3000]+', ' ', re.sub(u'|\xa0', ' ', unescape(t))).strip() for t in content]这个是从大苏神的网站(http://spaces.ac.cn/category/Big-Data/)上面抄的,是个很不错的过滤出汉字的条件
RegExp需要填写正则表达式,例如糗百抓笑话内容可以用 RegExp='([\s\S]*?)',每个网站都不同需要尝试。。。在下经常是连蒙带猜写出来的。。
2.xpath。对于 xpath,推荐使用 scrapy 进行爬取。使用lxml结合request也可以进行xpath解析。
scrapy的爬取操作不同于一般的python文件。
还推荐一个写得很好的博客here
(我比较懒,就不自己重新总结了……就像写程序一样,能调整界面的人永远不会自己编译)