一直说爬虫,你可知道爬虫的机制内容的嘛?

一 什么是爬虫

爬虫:就是抓取网页数据的程序。

二、爬虫怎么抓取网页数据:

网页三大特征:

-1. 网页都有自己唯一的URL(统一资源定位符)来进行定位

-2. 网页都使用HTML (超文本标记语言)来描述页面信息。

-3. 网页都使用HTTP/HTTPS(超文本传输协议)协议来传输HTML数据。

爬虫的整体设计思路:

-1. 首先确定需要爬取的网页URL地址。

-2. 通过HTTP/HTTP协议来获取对应的HTML页面。

-3. 提取HTML页面里有用的数据:

a. 如果是需要的数据,就保存起来。

b. 如果是页面里的其他URL,那就继续执行第二步。

四、为什么选择Python做爬虫?

可以做爬虫的语言有很多,如 PHP、Java、C/C++、Python等等…

- Java 的网络爬虫生态圈也很完善,是Python爬虫最大的对手。但是Java语言本身很笨重,代码量很大。

重构成本比较高,任何修改都会导致代码的大量变动。爬虫经常需要修改部分采集代码。

- C/C++ 运行效率和性能几乎最强,但是学习成本很高,代码成型比较慢。

能用C/C++做爬虫,只能说是能力的表现,但是不是正确的选择。

- Python 语法优美、代码简洁、开发效率高、支持的模块多,相关的HTTP请求模块和HTML解析模块非常丰富。

还有强大的爬虫Scrapy,以及成熟高效的 scrapy-redis分布式策略。

而且,调用其他借口也非常方便(胶水语言)

五、爬虫必须掌握的知识:

-1. Python的基本语法知识

-2. 如何抓取HTML页面:

HTTP请求的处理,urllib、urllib2、requests

处理后的请求可以模拟浏览器发送请求,获取服务器响应的文件

-3. 解析服务器响应的内容

re、xpath、BeautifulSoup4(bs4)、jsonpath、pyquery等

使用某种描述性一样来给我们需要提取的数据定义一个匹配规则,

符合这个规则的数据就会被匹配。

-4. 如何采集动态HTML、验证码的处理

通用的动态页面采集:Selenium + PhantomJS(无界面):模拟真实浏览器加载js、ajax等非静态页面数据

Tesseract:机器学习库,机器图像识别系统,可以处理简单的验证码,复杂的验证码可以通过手动输入/专门的打码平台

-5 Scrapy框架:(Scrapy,Pyspider)

高定制性高性能(异步网络框架twisted),所以数据下载速度非常快,

提供了数据存储、数据下载、提取规则等组件。

-6 分布式策略 scrapy-reids:

scrapy-redis,在Scrapy的基础上添加了一套以 Redis 数据库为核心的组件。

让Scrapy框架支持分布式的功能,主要在Redis里做 请求指纹去重、请求分配、数据临时存储。

简单的爬虫实现:

本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘。本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的是python 3.5.2版本,以前的版本可能导入的包的名字不一样,调用的库函数方式有些差别。代码如下:

[python]view plain copy

#coding =utf-8

import urllib.request

import re

def getHtml(url):

html = page.read() ##获取目标页面的源码

return html

def getImg(html):

reg = 'src="(.+?\.png)"' ##正则表达式筛选目标图片格式,有些是'data-original="(.+?\.jpg)"'

img = re.compile(reg)

html = html.decode('utf-8') ##编码方式为utf-8

imglist = re.findall(img, html) ##解析页面源码获取图片列表

#print(imglist)

x = 0

#length = len(imglist)

for i in range(6): ##取前6张图片保存

imgurl = imglist[i]

#imgurl = re.sub('"(.*?)"',r'\1',imgurl) #取单引号里的双引号内容

#print(imgurl)

x += 1

global Max_Num

Max_Num = 1

##有时候无法打开目标网页,需要尝试多次,这里设置为1次

for i in range(Max_Num):

try:

html = getHtml("view-source:http://www.shangxueba.com/jingyan/2438398.html")

getImg(html)

break

except:

if i

continue

else:

print ('URLError: All times is failed ')

-------------------------------------------------------------------------------------------------------------------------------

每天晚上20:30我都会开直播给大家分享Python知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2018Python学习教程),大家都是学习Python的,或是转行,或是大学生,还有工作中想提升自己能力的Python党,如果你是正在学习Python的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180326A1BJHB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券