声明:本人刚刚摸上爬虫的门槛,文中的一些内容也多是我自己学习中碰到的一些问题、解决问题的过程、对问题的一些理解和自己的一些感受,所以难免会有些错误和表达不清的地方,希望读者可以多包涵,也希望同学们可以加以指正。
今天在youtube上看到一个很不错爬虫入门教学的po主,如果有也想了解一下爬虫或者不知怎么入门的小伙伴可以先去他的教学网站上去看一看。
本次内容学自莫烦Python2.1
正则表达式
这是要爬取的第一个简单的网站

网页源码(看网页代码的话,chrome应该是比其他浏览器要好一些的)

首先,先读取下面这个网页的源码
"https://morvanzhou.github.io/static/scraping/basic-structure.html"
decode用于对网页中的中文元素进行解析

利用正则表达式(re)选取文本信息
利用正则表达式,可以将抓取到的网页中指定的信息读取出来(不知道什么是正则表达式的可以到廖雪峰老师的官网(正则表达式),或者莫烦python官网(莫烦python)稍做了解)

从代码中可以看出来,re读取到的信息是以list的形式返回出来的。而且爬取<a>标签中的网址时,还带有href的字符串,用起来感觉有点复杂。所以这种方法暂时只做了解。
BeautifulSoup
关于BeautifulSoul的详细用法可以看一下Beautiful的中文官网(BeautifulSoup中文官网)
这里还是爬取刚刚的 https://morvanzhou.github.io/static/scraping/basic-structure.html

用Beautiful解析html文档

features在这是选取解析器,且目前支持“lxml”, “html5lib”, 和 “html.parser”,不同的解析器的功能和功效都略有不同,这个我先不深入解。
从这里就可以看出BeautifulSoup的强大之处了:解析之后,直接就可将h1,p标签中的内容输出。
然后再看一下解析后的soup和html的类型区别:

这里可以看出,虽然soup和html输出的格式一样(不过这里,如果在jupyter中不用print直接输出html的话,会输出一串没有排版的带有转义字符的字符串),但是类型是不一样的。
Beautiful.find_all

这里find_all的返回值乍一看,看成的list。不过list中的字符串的要加引号的,type一下

这应该就是beautifulsoup中独有的类型吧,具体含义不是很清楚,但是通过后面的代码可以知道,它类似于一个字典,将a标签中的'href'看作key,将网站看作value。(不过里面的文字是被自动过滤了吗)
如果用for循环的方式打印出来,可以看到输出的网站是可以直接点击跳转的。
另外,如果要将标签中的文本信息打印出来的话可以用get_text()

而且这要用for循环的形式,如果直接用all_href.get_text()的话就会报错

这里应该是type的问题


这里的bs4.element.ResultSet我不知道叫什么类型,应该是可以翻成‘结果集’的吧,所以它是一个集合的类型,并且这个类型是没有get_text()这个attribute的。
而每次从all_href取出的对象就是一个tag类型,所以可以用get_text直接输出它的文本信息。
网友评论