python爬虫学习

#python爬虫

爬虫技能树:

![爬虫技能树.jpg](D:/study/Python学习/爬虫技能树.jpg "")

##爬虫方案分析

参考链接:https://www.cnblogs.com/zw369/p/6123569.html

1、python自带的urlib2和urlib或者第三方模块requests 

  这种方案适合简单的页面爬虫,比如爬取博客园推荐文章。

  urllib2和urllib是python自带模块可用来发送处理请求,虽然比较灵活但API易用性较差,所以一般都要进行二次封装,我曾经也进行过封装,最后发现自己封装出来的模块无限趋近于非常成熟的requests库,所以还是直接使用requests吧,当然requests只发送和接受请求,对于页面分析还要配合lxml或beautifulsoup等第三方库进行。高级点的爬虫不仅仅是发送和处理请求,还需要处理异常,请求速度控制等问题,这就需要我们写额外的代码去控制,当然我们可以自己写只是时间问题,但完全没有必要,接下来我会介绍第二种方案。

2、scrapy框架

  scrapy是爬虫领域的佼佼者,目前我做的项目无论复杂与否,都采用scrapy进行,对于请求调度,异常处理都已经封装好了,而且有第三方的scrapy-redis还可以支持分布式,我们把关注点放在更重要的页面分析和规则编写上,代码可以参考github上的例子。(https://github.com/world1234567/scrapy_for_huxiu)

3、selenium

这种方式我称为终极必杀器,一般是实在没办法的时候才用,以前我在利用某家搜索引擎抓取文章时,该搜索引擎采用的比较高难度的反爬虫机制而且不断变化让人找不到规律,最典型的特点就是cookie会随机隐藏到某个页面js和图片中,解决方案就是模拟浏览器的行为加载所有js等静态资源文件,如果自己写个浏览器取解析太扯蛋了,如果chrome浏览器能开放接口,通过chrome的加载方式获取页面的内容就好了,这就是selenium了,selenium加上随机等待时间可以模拟出和人非常类似的操作行为,缺点就是速度较慢,但是一般爬虫对抓取速度要求不高,重要的是稳定性,这种方式对于抓取反爬虫机制做的好的大型网站比较适用。


总结:对于大部分爬虫需求直接用scrapy解决,如果解决不了再采用第一种或第三种方案,就这么简单。


###urllib.request模块

+ 爬取网页上的图片实例

import urllib.request

import socket

import re

import sys

import os

targetDir = r"D:\project\webdownload"

def destFile(path):

if not os.path.isdir(targetDir):

os.mkdir(targetDir)

pos = path.rindex('/')

t = os.path.join(targetDir,path[pos+1:])

return t

#url="https://www.douban.com/"

url="http://www.netbian.com/"

webheader={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}

req = urllib.request.Request(url=url,headers=webheader)

webPage = urllib.request.urlopen(req)

#data = webPage.read().decode('UTF-8')

data = webPage.read().decode('gbk')

print(data)

for link,t in set(re.findall(r'(http:[^\s]*?(jpg|png|gif))', str(data))):

print(link)

try:

urllib.request.urlretrieve(link, destFile(link))

except():

print('失败')


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值