欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

网络爬虫

程序员文章站 2022-07-05 12:57:40
...
  1. URL
    URL全称是统一资源定位符(Uniform Resource Locator),一般语法格式为:
    (带方括号[]的为可选项):
    protocol ????/ hostname[:port] / path / [;parameters][?query]#fragment
    主要由四部分组成:
    ①protocol(协议):指定使用的传输协议, 最常用的是HTTP协议,它也是目前WWW中应用最广的协议。
    ②hostname(主机名):是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址。
    ③port(端口号):整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http的默认端口为80。如果输入时省略,则使用默认端口号。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项。
    ④path(路径):由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
  2. Beautifulsoup4
    该库通过定位HTML 标签来格式化和组织复杂的网络信息,用简单易用的Python 对象为我们展现XML 结构信息。通俗一点,就是当我们面对get得到的html文件近乎是没有固定格式的字符串,看起来很乱,如果我们需要去得到某个标签的内容是,会采用查找字符串的形式去定位,但当我们有了这个库,他就会帮我们去快速定位各种标签及其属性,简化我们工作量。
安装方式:cmd-pip install beautifulsoup4

BeautifulSoup 里的find() 和findAll() 可能是你最常用的两个函数。借助它们,你可以通
过标签的不同属性轻松地过滤HTML 页面,查找需要的标签组或单个标签。
以下是《Python网络数据采集》的原文介绍:

这两个函数非常相似,BeautifulSoup 文档里两者的定义就是这样:

 findAll(tag, attributes, recursive, text, limit, keywords)
 find(tag, attributes, recursive, text, keywords)

很可能你会发现,自己在95% 的时间里都只需要使用前两个参数:tag 和attributes。但是,我们还是
应该仔细地观察所有的参数。
标签参数tag 前面已经介绍过——你可以传一个标签的名称或多个标签名称组成的Python列表做标签
参数。例如,下面的代码将返回一个包含HTML 文档中所有标题标签的列表:

.findAll({"h1","h2","h3","h4","h5","h6"})

属性参数attributes 是用一个Python 字典封装一个标签的若干属性和对应的属性值。例
如,下面这个函数会返回HTML 文档里红色与绿色两种颜色的span 标签:

.findAll("span", {"class":{"green", "red"}})

递归参数recursive 是一个布尔变量。你想抓取HTML 文档标签结构里多少层的信息?如果
recursive 设置为True,findAll 就会根据你的要求去查找标签参数的所有子标签,以及子
标签的子标签。如果recursive 设置为False,findAll 就只查找文档的一级标签。findAll
默认是支持递归查找的(recursive 默认值是True);一般情况下这个参数不需要设置,除
非你真正了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数。
文本参数text 有点不同,它是用标签的文本内容去匹配,而不是用标签的属性。假如我们
想查找前面网页中包含“the prince”内容的标签数量,我们可以把之前的findAll 方法换
成下面的代码:

nameList = bsObj.findAll(text="the prince")
print(len(nameList))

输出结果为“7”

范围限制参数limit,显然只用于findAll 方法。find 其实等价于findAll 的limit 等于
1 时的情形。如果你只对网页中获取的前x 项结果感兴趣,就可以设置它。但是要注意,
这个参数设置之后,获得的前几项结果是按照网页上的顺序排序的,未必是你想要的那
前几项。
还有一个关键词参数keyword,可以让你选择那些具有指定属性的标签。例如:

allText = bsObj.findAll(id="text")
print(allText[0].get_text())

以下四个对象是你用BeautifulSoup 库时会遇到的所有对象:
• BeautifulSoup 对象
前面代码示例中的bsObj
• 标签Tag 对象
BeautifulSoup 对象通过find 和findAll,或者直接调用子标签获取的一列对象或单个
对象,就像:
bsObj.div.h1
但是,这个库还有另外两种对象,虽然不常用,却应该了解一下。
• NavigableString 对象
用来表示标签里的文字,不是标签(有些函数可以操作和生成NavigableString 对象,
而不是标签对象)。
• Comment 对象
用来查找HTML 文档的注释标签,<!-- 像这样 -->

  1. 正则表达式
    之所以叫正则表达式,是因为它们可以识别正则字符串(regular string);也就是说,它们
    可以这么定义:“如果你给我的字符串符合规则,我就返回它”,或者是“如果字符串不符
    合规则,我就忽略它”。这在要求快速浏览大文档,以查找像电话号码和邮箱地址之类的
    字符串时是非常方便的。

  2. Scrapy
    Scrapy 就是一个帮你大幅度降低网页链接查找和识别工作复杂度的Python 库,它可以
    让你轻松地采集一个或多个域名的信息。

相关标签: python 爬虫