DC学院数据分析学习笔记(四):爬虫的一些高级技巧

简介: 爬虫的一些高级技巧:设置代理和UA

继续爬虫之旅!做完整个爬虫过程之后,成就感爆棚<( ̄︶ ̄)↗[GO!]

三大爬虫技巧

1. 设定 程序休止的时间

n为想要实现的时间间隔

import time 
time.sleep(n)

2. 设定代理

#使用urllib.request的两个方法进行代理的设置
proxy = urlrequest.ProxyHandler({'https': '47.91.78.201:3128'})
opener = urlrequest.build_opener(proxy)

代理的不同匿名类型

低级别(Transparent Proxy)

服务器可以知道在使用代理,且知道你的真实IP

中级别(Anonymous Proxy)

服务器可以知道你在使用代理,但无法知道真实的IP

高级别(Elite Proxy/Highly Anonymous Proxy)

服务器无法知道在使用代理

推荐一个免费代理服务器的网站(亲测可用):http://www.xicidaili.com/

3. User-Agent

UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA。这是为了向我们所访问的网站提供我们所使用的浏览器类型(版本) 等信息的,比如用手机访问和电脑访问时看到的界面可能是不一样的,这就是网站通过UA来判断的。
当然,UA也可以进行伪装。

网站是可以识别你是否在使用Python进行爬取,需要你在发送网络请求时,把header部分伪装成浏览器

这里有个UA大全:http://blog.csdn.net/bone_ace/article/details/52476016

opener.addheaders = [('User-Agent','...')]

OK,基础知识介绍完了。
下面来看一个我在DC学院上课时老师提供的一个例子:

Place Pulse Google街景图爬取

1. 一些前提准备

数据集的网址:http://pulse.media.mit.edu/data/
image

image

第二项研究的目标是将数据收集范围扩展到来自六大洲28个国家的56个城市和6个新的评估问题。 在线通过用户根据看图片来投票这城市六个特征,如:是否安全,是否天气好等等。

来自第二次研究的数据将有助于开发一个数据集,可以用来训练机器学习算法,这些算法可以帮助我们识别确定图像引发的评估反应的特征,并且推断图像的评分,从而扩展方法到新的城市。

这样通过训练,之后我们就不需要人去标注,而是可以用模型预测.

OK !
实验时这样的,先下载上图中的数据集,只有50兆,里面存放的时图片的经纬度。我们就是是要通过编写一个python的爬虫去利用数据集中的已经告诉我们的经纬度信息去进行自动的它用于比较的图片(如上图中的两张对比安全度的图片)的抓取。

打开下载下来文件夹中的readme文件,发现里面提供了一个google地图的API,OK结合下载下来的csv文件中图片的经纬度信息,可以通过这个API把图片下载下来。

开始干吧!

2. 准备工作:载入包,定义存储目录,连接API

image
image

import urllib.request as urlrequest
import time
import random

#定义了一些目录

IMG_PATH = './imgs/{}.jpg'  ##存储下载下来的图片
DATA_FILE = './data/votes.csv'  ##将所有的数据文件存储在data的目录下
STORED_IMG_ID_FILE = './data/cached_img.txt' ##记录已经下载了哪些图片(ID),防止中断后重新下载重复
STORED_IMG_IDS = set() ##将cached_img.txt中的图片ID存放到集合中,方便检查是否这张图片已经下载了

#这个即是在readme中看到的下载街景地图的API,而我们需要填的属性就是 {经度} 和 {维度} ,
#之后可以用string中的format函数将这两个参数填入
IMG_URL = 'https://maps.googleapis.com/maps/api/streetview?size=400x300&location={},{}'

3. 应用爬虫技巧:使用代理服务器、User-Agent

#创建一个代理服务器的地址,这里要去网上找代理服务器(不要用我的这个,一般代理服务器是有存活时间的)
proxy = urlrequest.ProxyHandler({'http': '122.114.31.177:808'})

#用设置的代理服务器去新建一个opener
opener = urlrequest.build_opener(proxy)

#在这里进行上文提到的“UA伪装”
opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]

# 用urlrequest去打开网页
urlrequest.install_opener(opener)

4. 读取图片的id

# 从下载的图片的ID文件STORED_IMG_ID_FILE中按行依次读取到STORED_IMG_IDS这个集合中
with open(STORED_IMG_ID_FILE) as input_file:
    for line in input_file:
        STORED_IMG_IDS.add(line.strip())

5. 根据提供的图片id文档,进行google街景图片的爬取

    with open(DATA_FILE) as input_file:
        skip_first_line = True ##因为第一行是属性名称,所以跳过第一行
        for line in input_file:
            if skip_first_line:
                skip_first_line = False
                continue
            #进行切分,得到左边图片的经纬度,右边图片的经纬度,以及获胜的图片
            left_id, right_id, winner, left_lat, left_long, right_lat, right_long, category = line.split(',')


        
            #针对左边的图片。

            if left_id not in STORED_IMG_IDS: ##如果没有下载过就下载
                print ('saving img {}...'.format(left_id))
                # 1.在API中添加进经纬度;2.存入到之前的文件夹中,名字为图片的ID
                urlrequest.urlretrieve(IMG_URL.format(left_lat, left_long), IMG_PATH.format(left_id))
                # 在集合中加入已经下载的图片ID
                STORED_IMG_IDS.add(left_id)
                #防止程序终止,集合中ID消失,也将已下载ID存储进硬盘中
                with open(STORED_IMG_ID_FILE, 'a') as output_file:
                    output_file.write('{}\n'.format(left_id))
                time.sleep(1)  # wait some time, trying to avoid google forbidden (of crawler)

            if right_id not in STORED_IMG_IDS:
                print ('saving img {}...'.format(right_id))
                urlrequest.urlretrieve(IMG_URL.format(right_lat, right_long), IMG_PATH.format(right_id))
                STORED_IMG_IDS.add(right_id)
                with open(STORED_IMG_ID_FILE, 'a') as output_file:
                    output_file.write('{}\n'.format(right_id))
                time.sleep(1)  # wait some time, trying to avoid google forbidden (of crawler)
                ##为了防止被检测出来,也可以用随机函数:
                ## time.sleep(random.random()*5) 
                ##随机停顿0~5s的时间
saving img 513d2dbefdc9f03587002515...
saving img 51413b2ffdc9f049260058ca...
saving img 513d7e23fdc9f0358700733a...
saving img 513d7ac3fdc9f0358700693f...
saving img 50f60c4dbeb2fed91000028d...
saving img 513cb652fdc9f03587000a1e...
saving img 513d9ff9fdc9f0358700887c...
saving img 513cd544fdc9f03587001efc...
saving img 513f320cfdc9f0358700e030...
saving img 513cc3acfdc9f035870016c3...
saving img 50f60b90beb2fed910000085...
saving img 513d6debfdc9f0358700521f...
saving img 513d6a38fdc9f035870049cb...
saving img 513e6b98fdc9f0358700c055...
saving img 513da088fdc9f035870089c5...
saving img 513d7bbefdc9f03587006c7c...
saving img 513d7971fdc9f035870064d4...
saving img 513d7eeafdc9f035870074e2...
saving img 50f5eb1cfdc9f065f0007fa8...
saving img 50f43bb0fdc9f065f0003356...
saving img 513d79d4fdc9f0358700660c...
saving img 51421ac1fdc9f0492600839e...
saving img 513f2a7afdc9f0358700d543...
saving img 51413978fdc9f04926005495...
saving img 5185cf07fdc9f03fd5000ebd...
saving img 51422806fdc9f04926008700...
saving img 50f5e6fefdc9f065f0006eb2...
saving img 513d6d7efdc9f0358700516c...
saving img 513d57fefdc9f03587003271...
saving img 513e62a8fdc9f0358700b718...
saving img 513f2ac2fdc9f0358700d5be...
saving img 513cba52fdc9f03587000dcb...
saving img 51421b25fdc9f0492600840a...
saving img 51414717fdc9f04926006993...
saving img 51413ca9fdc9f04926005b7e...
saving img 513d6890fdc9f035870043fc...
saving img 50f44808fdc9f065f0003cca...
saving img 513d7b26fdc9f03587006a76...
saving img 51408b84fdc9f0358700e953...
saving img 514133e3fdc9f04926004477...
saving img 513e1b3afdc9f03587009402...
saving img 513d9dfefdc9f03587008276...
saving img 51409acdfdc9f04926000fbc...

OK!看一下下载的图片:

image

大功告成!

目录
相关文章
|
2月前
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
Python爬虫可以用来抓取拼多多商品数据,并对这些数据进行数据分析。以下是一个简单的示例,演示如何使用Python爬取拼多多商品数据并进行数据分析。
|
2月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
8月前
|
数据采集 Web App开发 供应链
使用爬虫数据分析2023年房地产政策调整对楼市需平衡的影响
使用爬虫数据分析2023年房地产政策调整对楼市需平衡的影响
|
2月前
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
在上面的代码中,我们使用pandas库创建DataFrame存储商品数据,并计算平均价格和平均销量。最后,我们将计算结果打印出来。此外,我们还可以使用pandas库提供的其他函数和方法来进行更复杂的数据分析和处理。 需要注意的是,爬取拼多多商品数据需要遵守拼多多的使用协议和规定,避免过度请求和滥用数据。
|
6月前
|
数据采集 存储 数据挖掘
Python 爬虫实战之爬拼多多商品并做数据分析
在上面的代码中,我们使用pandas库创建DataFrame存储商品数据,并计算平均价格和平均销量。最后,我们将计算结果打印出来。此外,我们还可以使用pandas库提供的其他函数和方法来进行更复杂的数据分析和处理。 需要注意的是,爬取拼多多商品数据需要遵守拼多多的使用协议和规定,避免过度请求和滥用数据。
|
5月前
|
数据采集 JSON JavaScript
网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析
网络爬虫是一种程序或脚本,用于自动从网页中提取数据。网络爬虫的应用场景非常广泛,例如搜索引擎、数据挖掘、舆情分析等。本文将介绍如何使用JavaScript和Axios这两个工具,实现一个网络爬虫的实战项目,即从Reddit这个社交媒体平台上爬取视频,并进行数据分析。本文的目的是帮助读者了解网络爬虫的基本原理和步骤,以及如何使用代理IP技术,避免被目标网站封禁。
网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析
|
5月前
|
机器学习/深度学习 自然语言处理 算法
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)2
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
107 0
|
5月前
|
机器学习/深度学习 算法 数据可视化
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)1
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
71 0
|
数据挖掘
java202302java学习笔记第十五天-打乱数据分析
java202302java学习笔记第十五天-打乱数据分析
62 0
java202302java学习笔记第十五天-打乱数据分析
|
机器学习/深度学习 数据采集 Ubuntu
Python数据分析与挖掘实战学习笔记
Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。
171 0
Python数据分析与挖掘实战学习笔记