前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫第一天

python爬虫第一天

作者头像
py3study
发布2020-01-17 12:16:42
7180
发布2020-01-17 12:16:42
举报
文章被收录于专栏:python3python3

简介

1:组成:爬虫节点,控制节点和资源库。

       控制节点,也叫中央控制器,主要负责根据url地址分配线程,并调用爬虫节点进行具体的爬行。

       爬虫节点会按照具体的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后会将结果储存到对应资源库中。

2:类型:通用网络爬虫,聚焦网络爬虫,增量式网络爬虫,深层网络爬虫。

增量式更新:指更新时只更新改变的地方,未改变就不更新。

深层网络爬虫:爬取深层网页,需要想办法自动填写对应表单,填写有两种类型:基于领域知识的表单填写(建立一个填写表单的关键词库,在需要填写时根据语义分析自动填写)和基于网页结构分析的表单填写(一般是领域知识有限使用,根据网页结构分析自动填写)。

聚焦网络爬虫:构成:初始url集合,url队列,页面爬行模块,页面分析模块,页面数据库,链接过滤模块,内容评价模块,链接评价模块等。

3:爬行策略~选取url爬行顺序:深度|广度优先、大站优先、反链策略等

OPIC策略、PartialPageRank策略

一个网页的反向链接数:该网页被其他网页指向的次数(可能代表该网页被其他网页推荐次数)

4:网页更新策略:

用户体验策略:大部分用户只会关心排名靠前的网页,所以优先更新排名靠前的网页。

历史数据策略:依据历史更新数据通过泊松过程进行建模预测下次更新时间。

聚类分析策略:按照物以类聚的思想,根据每个类的网页抽样结果的平均更新值,确定每个聚类的爬行频率。

5:网页分析算法

基于用户行为的网页分析算法:会依据用户对网页的访问行为进行评价。

基于网络拓扑的网页分析算法:依靠网页的链接关系、结构关系、已知网页或数据等对网页进行分析的一种算法。

6:身份识别

        爬虫在对网页进行爬取得时候,会通过HTTP请求中的User Agent字段告知自己的身份。

爬虫访问一个网站的时候会根据该站点下的Robots.txt文件来确定可以爬取的网页范围,Robot协议是需要网络爬虫共同遵守的协议。

Urllib库:

是python提供的一个操纵URL的模块。

快速使用爬取网页.html

方式一:  思路:

        首先将爬取得内容读取出来赋值给一个变量data。

        再以写入的方式打开一个本地文件命名为*.html等的网页格式

        之后将data中的值写入该文件中,关闭该文件。

#使用:目的爬取一个百度首页的网页写入1.html,

import urllib.request

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

data=file.read() #读取全部内容

#dataline=file.readline() #读取一行内容,会把内容给一个列表变量

#print(dataline)#输出爬取内容的第一行

#print(data)#爬取内容全部

fhandle=open("D:/crawler/1.html","wb")#将该data内容写入该目录下的html

fhandle.write(data)

fhandle.close()

方式二:使用urlretrieve()函数爬取网页

import urllib.request

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

urllib.request.urlcleanup()  #用于清除缓存

其他相关方法

info=file.info()#返回环境相关信息

print(info)

code=file.getcode()#获取状态码

print(code)

url=file.geturl()#获取爬取的url地址

print(url)

对网页进行编码、解码

urllib.request.quote("http://www.sina.com.cn")#编码

#编码后:http%3A//www.sina.com.cn

urllib.request.unquote("http%3A//www.sina.com.cn")#解码

#解码后:http://www.sina.com.cn

反爬虫设置

 有时候爬取网页会出现403错误,这是对方网页进行了反爬虫设置

这时我们可以设置Header属性,模拟浏览器去访问这些网站。

import urllib.request

url="http://blog.csdn.net/weiwei_pig/articledetails/51178226"

file=urllib.request.urlopen(url)

#执行后出现403错误

此时我们打开百度首页按 F12 这时会出现一个窗口,我们切换到NetWork标签页,然后单击百度一下让网页发生一个动作

这时点击NetWork下面出现的www.baidu.com,之后右边出现页面切换到Header,向下翻找到User-Agent字样的信息,复制下来。

得到信息:

User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

接下来有两种方法:

    1:使用build_opener()修改报头

    使用urllib.request.build_opener()

import urllib.request

url="http://blog.csdn.net/weiwei_pig/article/details/51178226"

headers={"User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}

opener=urllib.request.build_opener()

opener.addheaders=[headers]

data=opener.open(url).read()

#接下来写入文件

fhandle=open("D:/crawler/4.html","wb")

fhandle.write(data)

fhandle.close()

        2:使用add_header()添加报头

import urllib.request

url="http://blog.csdn.net/weiwei_pig/article/details/51178226"

req=urllib.request.Request(url)

req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')

data=urllib.request.urlopen(req).read()

fhandle=open("D:/crawler/4.html","wb")

fhandle.write(data)

fhandle.close()

 此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档