0%

python-regular-study

b不同类型的网络爬虫,其实现原理也是不同的,但这些实现原理中,回存在很多共性。

通用网络爬虫

  1. 获取初始的 URL。初始的 URL 地址可以由用户人为地指定,也可以由用户指定的某个或某几个初始爬取网页决定
  2. 根据初始的 URL 爬取页面并获得新的 URL。获得初始的 URL 地址后,首先需要爬取对应 URL 地址中的网页,爬取了对应的 URL 地址中的网页后,将网页存储到原始数据库中,并且在爬取网页的同时,发现新的 URL 地址,同时将已爬取的 URL 地址存放到一个 URL 列表中,用于去重及判断爬取的进程。
  3. 将新的 URL 放到 URL 队列中。在第 2 步中,获取了下一个新的 URL 地址后,会将新的 URL 地址 放到 URL 队列中
  4. 从 URL 队列中读取新的 URL,并依据新的 URL 爬取网页,同时从新网页中获取新的 URL,并重复上述的爬取过程。
  5. 满足爬虫系统设置的停止条件时,停止爬取。在编写爬虫的时候,一般会设置相应的停止条件。如果没有设置停止条件,爬虫则会一直爬取下去,一直到无法获取新的 URL 为止。

聚焦网络爬虫

由于其需要有目的地进行爬取,所以必须要增加目标地定义和过滤机制。

  1. 对爬取目标地定义和描述。
  2. 获取初始地 URL。
  3. 根据初始地 URL 爬取页面,并获得新的 URL。
  4. 从新的 URL 中过滤掉与爬取目标无关地链接。
  5. 将过滤后地 URL 放到 URL 队列中。
  6. 从 URL 队列中,根据搜索算法,确定 URL 地优先级,并确定下一步要爬取的 URL 地址。在通用网络爬虫中,下一步爬取哪些 URL 地址,是不太重要的,但在聚焦网络爬虫中,由于其具有目的性,故而下一步爬取哪些 URL 相对来说比较重要,不同的爬取顺序,可能导致爬虫的执行效率不同。
  7. 从下一步要爬取的 URL 地址中,读取新的 URL,然后依据新的 URL 地址爬取网页,并重复上述爬取过程。
  8. 满足停止条件时,或无法获取新的 URL 时,停止爬行。

Urllib 库与 URLError 异常处理

要使用 Urllib 爬取网页,首先需要导入对应的模块。

1
import urllib.request

使用 urllib.request.urlopen() 打开并爬取一个网页

1
file = urllib.request.urlopen("http://www.baidu.com")

此时,还需要将对应的网页读取出来,使用 file.read() 读取全部内容,或者也可以使用 file.readline() 读取一行内容

1
2
data = file.read()
dataline = file.readline()

读取内容常见的 3 种方式:

  1. file.read() 读取文件的全部内容,read 会把读取道德内容赋给一个字符串变量
  2. file.readlines() 读取文件的全部内容,并把读取到的内容赋给一个列表变量
  3. File.readline() 读取文件的一行内容

保存到本地

方式一:以写入的方式打开一个本地文件,并将 read 的内容写入该文件中,关闭该文件。

1
2
3
fhandle = open("D:/python/myweb/1.html", "wb")
fhandle.write(data)
fhandle.close()

方式二:使用 urllib.request.urlretrieve(url, filename=本地文件地址) 函数直接将对应的信息写入本地文件

1
filename = urllib.request.urlretrieve("http://edu.51cto.com", filename="D:/python/myweb/2.html")

urlretrieve() 执行过程中,会产生一些缓存,可以使用 urlcleanup() 进行清除

1
urllib.request.urlcleanup()

模拟浏览器

超时设置

HTTP 协议请求实战

设置代理服务器

正则表达式

正则表达式时描述字符串排列的一套规则。

基础知识

常见函数

re.match()

re.search()

re.findall()

re.sub()