爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
前面学习了基本的浏览器伪装的方式,现在来看三个实例:
例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 最后来看看如何根据关键字来爬取淘宝的图片
这个思路和前面的例子其实没啥区别,主要难点有两个:
- 分析url的名字规律,获取对应的关键字和分页的格式
- 淘宝的图片,如果直接点开会发现和源代码里面的不是完全一样,首先是绝对路径隐藏了,第二呢他后面自动跟了一个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博文,糗事百科段子以及淘宝的图片相关推荐
- 爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息
爬虫项目实战一:基于Scrapy+MongDB爬取并存储糗事百科用户信息 一.前言 二.项目目标 三.项目的环境配置 四.项目实现 1. 创建QSBK项目 2. 实现Spider 1. 实现一页网页上 ...
- Python爬取多页糗事百科
这次带来的是如何爬取糗事百科 且 写入txt文档 大家都知道,糗事百科可以带给大家很多快乐. 在这里,我们将实现对其内容的爬取,将这些好笑的段子记录下来,可以让我们打发无聊或没网时的时间. 当爬取我们 ...
- 实现一个go语言的简单爬虫来爬取CSDN博文(一)
http://blog.csdn.net/tyBaoErGe/article/details/50375802?hmsr=studygolang.com&utm_medium=studygol ...
- Python3写爬虫(五)爬取糗事百科段子
2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...
- 爬虫爬取糗事百科段子
目录 糗事百科段子爬取 爬虫功能介绍 所需软件 网页解析 找到所需信息所在代码段 获取信息 编程思路分析 获取当前所有段子 对提取的内容进行优化 数据合并 查看点赞数最多的内容 总结 最后 附代码 糗 ...
- 爬虫实战1:爬取糗事百科段子
本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...
- Python爬虫实战一之爬取糗事百科段子
点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...
- 转 Python爬虫实战一之爬取糗事百科段子
静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...
- 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子
文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...
最新文章
- 省钱之道--图解域域树域林根域的含义
- sql中exists,not exists的用法
- java发送短信模板_java发送短信
- python 多进程——使用进程池,多进程消费的数据)是一个队列的时候,他会自动去队列里依次取数据...
- 织梦添加搜索框里的提示消息
- 基于WebSocket协议实现Broker
- vmware workstation 关于三种网络连接方式的理解
- 求锤得锤,你要的一致性 hash 来了! | 附代码
- 苹果Mac智能照片编辑软件:​​​​Movavi Picverse
- Java如何获取文件编码格式
- presto----grouping sets/cube/rollup 函数
- 基于UML的绩效考核管理系统
- (一)JMeter性能测试,完整入门篇:性能测试操作步骤
- 修改MAC密码 Navicat每次打开都要输入密码
- c#往结构体里面读数据_C# 结构体和ListT类型数据转Json数据保存和读取
- 《C Prime Plus》(第六版) 第03章 编程练习 7 英寸转换成厘米
- java指针压缩临界值
- 数理统计与数据分析第三版习题 第4章
- 中国MEMS传感器行业运营模式调研及投资效益分析报告2022-2027年
- JS判断客户端是否已安装ActiveX控件