python爬虫(1)

xiaoxiao2021-02-28  8

1,  什么是网络爬虫?

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

2,  网络爬虫的运行原理。

a)      通用爬虫的原理;

定义起始url进行爬取,将网页中的url放入url队列中,同时将内容抓取,判断是否还有url,如果还有就继续爬,没有就结束了。

b)      聚焦爬虫的原理;

定义抓取内容,然后对抓取内筒进行一个过滤后爬取,之后与通用爬虫一样。

3,  正则表达式。

import re à 导入正则表达式包

data = re.search(“a”,”a”); à 存在匹配就返回一个匹配对象。

print data.group(0); à 打印得到结果

*正则表达式:

\n –>(匹配)回车 \w à任意字母数字或者下划线\dà数字 \s空格 \W 与\w相反

\S 非空格  a[jsz]n à 中间3个字母取任意一个。 ^开始位置 .任意字符 $ 结束位置

*表示一次两次或者多次?一次或者0次+ 一次或者多次t{n} t出现了n次  t{m,n}出现了m到n次  ()输出的就是其中的内容, |或者

其他的在基础中已将讲过了,就不再罗嗦。

4,  urllib包与urllib2包

Python中包含了两个网络模块,分别是urllib与urllib2,urllib2是urllib的升级版,拥有更强大的功能。urllib,让我们可以像读文件一样,读取http与ftp。而urllib2,则在urllib的基础上,提供了更多的接口,如cookie、代理、认证等更强大的功能。值得一提的就是python3之后,urllib已经替代了urllib2,也就是python中只有urllib。

l  常用函数。

urlopen(网址,timeout)#就是打开路径这个网址,返回一个文件的句柄,这里要讲下,timeout参数设置超时时间,若时间超过就抛异常。

urlretrieve(“网址”,”本地路径”)#将该网址的网页文件爬到并报存到这个路径

urlcleanup()#清理缓存,在操作过程中都存在缓存。

info()#显示当前环境的一些信息。

getcode()#获得返回的码,比如200,404,303什么的。

geturl()#获取url

queto()#对中文进行一个编码,向url中

5,  简单爬虫。

Import re

import urllib.request

#from urllib import request

data = urllib.request.openurl(‘http://www.XXX.com’)#此处网址是随意写的。得到的是一个网页文件。需要注意的是http不能写成https,因为https是一个安全的版本,python无法爬取相关内容。

Datainf = data.read()

Datainf = datainf.decode(‘utf-8’)

Pat = ‘(*)’ #正在表达式

 Re.compile(pat,datainf)#就可以匹配出相关的内容,返回的结果是一个数组

6,  模拟请求方式的爬虫。

a)      get请求方式

get请求就是在url后面加入参数传入后台的数据。

data = “中文”

data =urllib.request.queto(data);

url =”http://www.baidu.com/s?wd=“+data

urllib.request.urlopen(url)

就爬下来了百度搜索中文的页面数据。

b)      post请求方式。

importurllib.parse #用于封装post表单的数据

import urllib.request#导入urllib库中的request模块

url = http://www.baidu.com/

mydata =urllib.parse.urlencode( #设置post的表单

{“name”:”denglu”,#登录账号

“pass”:”11233” #密码

}#字典类型

).encode(“utf-8”)#采用utf-8编码方式

req = urllib.request.Request(url,mydata)#封装请求

data =urllib.request.urlopen(req).read()#获取网页信息

7,  异常处理。

主要的异常有URLError与HTTPError,其中HTTPError是子类。

URLError:a,服务器出错;b,禁止访问;c,没网;d,HTTPError

import urllib.error#导入error异常包

importurllib.request #导入request请求包

try:

urllib.request.rulopen(“http://blog.csdn.net”)

excepturllib.error.URLError as e: #捕捉异常

if hasattr(e,”code”) #拿出异常码

 print(e,code)

ifhasattr(e,”reason”) #拿出异常原因

 print(r.reason)

输出:    403

Forbidden

8,  浏览器伪装技术。

将请求伪装成浏览器发出的请求。

import urllib.request

url = “http://www.baidu.com”

headers = (“User-Agent”,” Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/62.0.3202.89 Safari/537.36”)#元组,设置浏览器的标识,这是去浏览器header里面复制的标识。

opener = urllib.request.build_opener() #创建一个opener,我理解为爬虫句柄

opener.addheaders=[headers] #将标识放入爬虫中设置为头

data = opener.open(url).read() #爬取

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-2450123.html

最新回复(0)