• 搜索
  •  找回密码
     立即注册

    QQ登录

    只需一步,快速开始

  • 登录
  • 注册
  • 找回密码
  • 管理
全部文章详情

【学习心得023】一次并不成功的爬虫实验

2018-08-01阅读 200 量化金融科技前沿 我要关注

  一次并不成功的爬虫实验

 作者:李实 

今天是我第一次分享学习心得,一次关于爬虫的实验。

part1:预习


今天我想报告一下关于小甲鱼python零基础班,爬虫的初次学习心得:


爬虫就是自动抓取网上的信息的程序。

今天从一个简单的idea做起,去虎扑爬一点表情包。

选择表情包因为我比较菜,jpg格式会比较好筛选一些。

选择虎扑也是因为菜,虎扑不需要登录就可以看全部内容,而微博需要登录cookie。

打开虎扑论坛的一个帖子,复制url。

part2:开干


要把网页图片装硬盘,总共三步(获取网页,找出图片地址,下载图片)


**第一步**  用到urllib.request模块的urlopen(),获得网页源代码。

**第二步**  使用正则表达式筛选源代码里我们需要的信息,在表情包上邮件,审查元素即可知道,src="这里的内容就是图片地址",将筛选出的地址生成一个列表。

![](https://i.imgur.com/Ges1I8W.png)

**第三步**  使用urllib.urlretrieve()直接下载下来。


ps:


中间还有一个小问题,一般网站不喜欢python访问他,我们必须伪装成一个人类在用浏览器访问他。要伪装一个http请求头,需要用到headers这个参数。

![](https://i.imgur.com/fzEFNoJ.png)

在网页右键审查元素,选择network,找到一个模式为post的元素,在request headers里找到user agent复制下来。

我们就伪装成这样就可以了。

(否则虎扑会返回一个登陆界面)

![](https://i.imgur.com/nJUZn0P.png)


至于怎么更像人类,不被封ip(一秒下几十个照片显然不是人类)

1 是引入time模块,每隔三五秒time.sleep()一下,装作普通人的速度。


2 第二种是使用代理ip池,设置一个列表,每隔一段时间随机换下一个ip地址。


作为新手,我们这次用第一个方法,每隔5秒停一下。



代码如下:

import urllib
import urllib.request
import re
import time

#隐藏请求,更改headers#
head={}
head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
#第一步获取网页源代码#
request=urllib.request.Request('https://bbs.hupu.com/22884468.html',headers=head)
response=urllib.request.urlopen(request).read().decode('utf-8')
#第二步从代码中找出图片地址#
def getimg(response):
    reg=r'src="(.+?\.jpg)"'
    #reg=r'src="(http.*.\jpg)'#
    imgre=re.compile(reg)
    imglist=re.findall(imgre,response)
    return imglist
#第三步下载图片#
def download(imglist):
    iname=0
    for i in imglist:
        urllib.request.urlretrieve(i,'%s.jpg'%iname)
        print('下载第%s张'%iname)
        time.sleep(10)
        iname+=1
print(getimg(response))
download(getimg(response))

结果并不如人意,正则只筛选出6个结果,还都是头像,显然不正确。


总结


有两个问题,第一是没有写异常处理。第二个是正则表达式不正确导致没有找到完整的地址。

即使结果正确,这方法也是一个低效的爬虫,写文章的时候才了解到xpath,过两天分享一个改进版。我一定要爬下这个帖子《想求表情包!着急和妹子聊天用!》


老师说过:“现阶段所有人学金融的主要障碍、痛苦和矛盾都是:人民群众日益增长的创新创意ideas和自身落后的编程和数学水平之间的矛盾。”


希望大家不要想我一样失败,我滚去学习了。。



推文内容仅代表学生本人学习心得,不代表本公众号立场。该公众号平台旨在鼓励学生学习分享知识,至于对错,大家都可以留言评论,甚至给推文打分。作者也需要大家的鼓励,以及大家的宝贵的意见。






"

上一篇:【转载】Python爬虫框架Scrapy学习笔记

下一篇:【学习心得022】统计调查程序改进

分享到:

相关文章