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

例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='<a href="(http://blog.*?)" target=.*'
urllist=re.compile(pat).findall(data)for i in range(len(urllist)):print(urllist[i])urllib.request.urlretrieve(urllist[i],'c:\\temp\\download\\%s.html'%i)

结果如下

例2 爬取糗事百科的段子

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

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

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

具体的说明可以参考官方文档
https://docs.python.org/3/howto/regex.html

import urllib.request
import re
headers=("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='<div class="content">.*?<span>(.*?)</span>.*?</div>'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.request
import re
import random
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(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='<div class="content">.*?<span>(.*?)</span>.*?</div>'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.request
import re
import 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://" + thisimglocalfile = "c:\\temp\\taobao\\" + str(i) + str(j) + ".jpg"urllib.request.urlretrieve(thisimgurl, filename=localfile)

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

  1. 爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息

    爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息 一.前言 二.项目目标 三.项目的环境配置 四.项目实现 1. 创建QSBK项目 2. 实现Spider 1. 实现一页网页上 ...

  2. Python爬取多页糗事百科

    这次带来的是如何爬取糗事百科 且 写入txt文档 大家都知道,糗事百科可以带给大家很多快乐. 在这里,我们将实现对其内容的爬取,将这些好笑的段子记录下来,可以让我们打发无聊或没网时的时间. 当爬取我们 ...

  3. 实现一个go语言的简单爬虫来爬取CSDN博文(一)

    http://blog.csdn.net/tyBaoErGe/article/details/50375802?hmsr=studygolang.com&utm_medium=studygol ...

  4. Python3写爬虫(五)爬取糗事百科段子

    2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...

  5. 爬虫爬取糗事百科段子

    目录 糗事百科段子爬取 爬虫功能介绍 所需软件 网页解析 找到所需信息所在代码段 获取信息 编程思路分析 获取当前所有段子 对提取的内容进行优化 数据合并 查看点赞数最多的内容 总结 最后 附代码 糗 ...

  6. 爬虫实战1:爬取糗事百科段子

    本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...

  7. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  8. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  9. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

最新文章

  1. 省钱之道--图解域域树域林根域的含义
  2. sql中exists,not exists的用法
  3. java发送短信模板_java发送短信
  4. python 多进程——使用进程池,多进程消费的数据)是一个队列的时候,他会自动去队列里依次取数据...
  5. 织梦添加搜索框里的提示消息
  6. 基于WebSocket协议实现Broker
  7. vmware workstation 关于三种网络连接方式的理解
  8. 求锤得锤,你要的一致性 hash 来了! | 附代码
  9. 苹果Mac智能照片编辑软件:​​​​Movavi Picverse
  10. Java如何获取文件编码格式
  11. presto----grouping sets/cube/rollup 函数
  12. 基于UML的绩效考核管理系统
  13. (一)JMeter性能测试,完整入门篇:性能测试操作步骤
  14. 修改MAC密码 Navicat每次打开都要输入密码
  15. c#往结构体里面读数据_C# 结构体和ListT类型数据转Json数据保存和读取
  16. 《C Prime Plus》(第六版) 第03章 编程练习 7 英寸转换成厘米
  17. java指针压缩临界值
  18. 数理统计与数据分析第三版习题 第4章
  19. 中国MEMS传感器行业运营模式调研及投资效益分析报告2022-2027年
  20. JS判断客户端是否已安装ActiveX控件

热门文章

  1. js设置北京时区_如何使不同时区的时间与京8区一致?(JS实现)
  2. 欧盟共同语言标准c1,阅读|【Reading Explorer】(pdf可下载)
  3. 原生JS实现任意数据的动态表格
  4. 当好领导者(一)——团结团队
  5. TC Games 电脑玩手游助手会员无水印版,专为游戏直播玩家打造
  6. 大道至简:大数据、小数据、量化交易
  7. Python爬虫必备知识点--整理核心基础
  8. excel 分组排名 countif
  9. HTML-简单表格制作
  10. 自编剧本——爱上坑神姐姐的少女(很H很暴力)