博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
阅读量:5838 次
发布时间:2019-06-18

本文共 4968 字,大约阅读时间需要 16 分钟。

前面学习了基本的浏览器伪装的方式,现在来看三个实例:

例1 爬取CSDN首页的博文

思路很简单,伪装浏览器之后,通过正则获取对应的url链接,然后把对应的url的文章都下载下来

#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport re,urllib.requesturl="http://blog.csdn.net/"header=("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36")opener=urllib.request.build_opener()opener.addheaders=[header]data=opener.open(url).read().decode('UTF-8')print(data)pat='

结果如下

爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片

例2 爬取糗事百科的段子

这个比起第一个例子来说,稍微复杂了一点点。

首先呢,我们需要爬取前面35页的段子,需要分析url的格式,每次翻页爬取的时候,都需要伪装浏览器,因此需要把伪装的User-Agent设置为全局的模式;

第二点,我们在正则匹配的时候使用了模式修饰符re.S。这是为什么呢,因为一个段子有很多行,默认情况下,小圆点只会匹配除了换行以外的所有符号,我们可以强制要求他匹配所有的符号包括换行符

具体的说明可以参考官方文档

import urllib.requestimport reheaders=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0")opener=urllib.request.build_opener()opener.addheaders=[headers]#安装为全局urllib.request.install_opener(opener)for i in range(0,35):    thisurl="http://www.qiushibaike.com/8hr/page/"+str(i+1)+"/?s=4948859"    data=urllib.request.urlopen(thisurl).read().decode("utf-8","ignore")    pat='
.*?
(.*?).*?
' rst=re.compile(pat,re.S).findall(data) for j in range(0,len(rst)): print(rst[j]) print("-------")

结果如下:


早晨去吃牛肉面,正在吃~~~~<br/>来了一位美女。<br/>老板,来碗牛肉面,<br/>大碗小碗的?<br/>早晨刚起床,大份(大粪)吃不下,来小份(小粪)的吧<br/>对面坐的大哥,你的面条怎么从鼻孔里出来了???


接上一条,不能一次发两张图郁闷


在食堂买饭,要了咖喱猪排饭。有个男生要了咖喱牛肉饭。<br/>一会饭熟了,阿姨说:咖喱牛好了。<br/>对我说:咖喱猪等一会


这地铁工艺广告看着不对劲啊!脖子有点脱节!这手也是特别畸形!P上去的吧!?


楼主是个敏感的人,读书时,经常因别人一句话不顺耳,就跟人家打架,树敌颇多,奈何我身强力壮,倒也没输过。<br/>有天放学回家的路上,突然出现几个大孩子拦着我,我一瞅,这,人多势众,不能吃眼前亏,忽然看到我妹妹走过来,赶紧喊:“二妹,快过来帮忙,她们人多!”<br/>我妹瞅着我们,结结巴巴的说:“我,我,我不认识她,我不是她妹妹,”说完风一样的跑了……<br/>二十几年了……现在你说你要结婚,问我送你什么礼物??<br/>送你赶快滚!


偷过人的朋友举手,不管男人女人,举手看看有多少。


有个妹纸发信息到我手机上说这个号码是她以前用的。现在无聊就打打玩玩,结果聊的特别嗨。慢慢的没怎么联系了。<br/>一晃5 6 年过去了。<br/>忽然今天想起这事。打电话到我以前的号码。居然联系上了。 我擦。(最巧的是我和那个妹子是同年同月同日的)<br/>不过5、6年了。她也结婚生子了。祝她幸福。对了今天我生日。生日快乐。周小洵。


因为孩子,和公婆住过一段时间。<br/>我对他们越好,他们事越多。比如,给他们买衣服,他们说我乱花钱。对他们好一点,他们觉得我无事献殷勤,想图谋他们财产。。。。。后来矛盾越来越多。<br/>到了后来,我婆婆直接对我说:滚!<br/><br/>后来,我就辞职了,带上钱去了远处,另外找工作。<br/>可我还在路上,车上,我婆婆就打电话给我老公,叫我回去。还说,如果我不喜欢原来的工作,可以给我另外找工作。让我别走。<br/>我愣了,实在不明白为什么?<br/>是觉得我好么?<br/>那为何说那么难听的话?<br/>是觉得我不好吗?<br/>那为啥说,滚?<br/>也许是因为我走了,他们自


我们是来跳广场舞的!哈哈


好长时间没给儿子买汉堡了,今天德克士会员日买一送一。和老公去吃,回来帮他带了一个,儿子放学回家告诉他有汉堡,他竟然说,今个太阳从西边出来了,不过说话时有着莫名的喜感


这都没人吃到。。?


例3 用户代理池的构建

这个在例2的基础上构建了一个列表,列表里面是多个User-Agent的内容,每次爬取的时候随机的获取一个User-Agent,这样对于网站而言,看起来好像是同一个IP地址不同的浏览器发出的请求,可以更好地实现反爬的效果。

知识点: random.choice可以随机地从列表选取一个内容

import urllib.requestimport reimport randomuapools=[    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",    ]def ua(uapools):    thisua=random.choice(uapools)    print(thisua)    headers=("User-Agent",thisua)    opener=urllib.request.build_opener()    opener.addheaders=[headers]    #安装为全局    urllib.request.install_opener(opener)for i in range(0,35):    ua(uapools)    thisurl="http://www.qiushibaike.com/8hr/page/"+str(i+1)+"/?s=4948859"    data=urllib.request.urlopen(thisurl).read().decode("utf-8","ignore")    pat='
.*?
(.*?).*?
' rst=re.compile(pat,re.S).findall(data) for j in range(0,len(rst)): print(rst[j]) print("-------")

例4 最后来看看如何根据关键字来爬取淘宝的图片

这个思路和前面的例子其实没啥区别,主要难点有两个:

  1. 分析url的名字规律,获取对应的关键字和分页的格式
  2. 淘宝的图片,如果直接点开会发现和源代码里面的不是完全一样,首先是绝对路径隐藏了,第二呢他后面自动跟了一个250x250.jpb的后缀,变成了缩小图,如果手动修改为绝对路径并去掉250的后缀,那么获取的就是大图了。
#!/usr/bin/env python#! -*- coding:utf-8 -*-# Author: Yuan Liimport urllib.requestimport reimport randomkeyname = "椰奶"#处理中文key = urllib.request.quote(keyname)uapools = [    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",]def ua(uapools):    thisua = random.choice(uapools)    print(thisua)    headers = ("User-Agent", thisua)    opener = urllib.request.build_opener()    opener.addheaders = [headers]    # 安装为全局    urllib.request.install_opener(opener)for i in range(1, 101):    url = "https://s.taobao.com/search?q=" + key + "&s=" + str((i - 1) * 44)    ua(uapools)    data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")    pat = '"pic_url":"//(.*?)"'    imglist = re.compile(pat).findall(data)    for j in range(0, len(imglist)):        thisimg = imglist[j]        thisimgurl = "http://" + thisimg        localfile = "c:\\temp\\taobao\\" + str(i) + str(j) + ".jpg"        urllib.request.urlretrieve(thisimgurl, filename=localfile)
本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/2052307,如需转载请自行联系原作者
你可能感兴趣的文章
PHP Ajax 跨域问题最佳解决方案
查看>>
leetcode-209-长度最小的子数组
查看>>
List转Datable(需区分对象充当List成员和数组充当List成员两种情况)
查看>>
ARRINC424—MORA(GRID)格式
查看>>
on duplicate key update 简单使用 添加或更新
查看>>
学习 yjango 博士的学习方法后的总结
查看>>
julia与python中的列表解析.jl
查看>>
读取HeidiSQL 配置文件中的密码
查看>>
css display flew 伸缩盒模型
查看>>
mysql一:初识数据库
查看>>
数据约束
查看>>
WEBSERVICE-CXF服务端代码
查看>>
HTML 30分钟入门教程
查看>>
用C#实现单链表(插入,在第i个前插,在第i个后插)
查看>>
FJUT2018年四校联合周赛-第三场(新手场)A题题解
查看>>
《JavaScript语言精粹》第二章-语法 简单笔记
查看>>
day02python的一些基本函数
查看>>
php经典算法
查看>>
随便说说辞职后
查看>>
POJ-A Simple Problem with Integers
查看>>