AI&BigData训练营笔记三:Python爬虫攻破反爬虫防御策略_爬虫攻破防爬-程序员宅基地

技术标签: 爬虫  反爬虫  Python  

系统环境:

操作系统:Windows8.1专业版 64bit    
Python:anaconda、Python2.7    
Python modules:requests、json、random、time

Background:

在使用Python爬虫爬取网页数据时,我们会遭到网站自身的反爬虫防御,这时候我们需要采取一些方法来攻破网站的反爬虫防御策略。

解决方法:

接下来,将使用伪装浏览器UA、IP代理、爬虫频率控制这三种方法来攻破网站的反爬虫防御策略。在编程实现之前,需要按照以上的系统环境,配置好自己的Python环境。

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 22 17:08:29 2018

@author: gmn
"""

#导入requests module
import requests
#导入json module
import json
#导入random module
import random
#导入time module
import time

#User-Agent列表,这个可以自己在网上搜到
USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
]

#设置IP代理
proxies={"http":"http://41.118.132.69:4433"}
#爬取100次
for index in range(100):
    print '第%d次爬取:' % (index+1)
    #设置要爬取的url
    url='http://money.finance.sina.com.cn/d/api/openapi_proxy.php/?__s=[[%22bkshy%22,%22%22,0]]'
    #设置get请求的User-Agent,用于伪装浏览器UA
    headers={'User-Agent':random.choice(USER_AGENTS)}
    #requests get请求
    req=requests.get(url,headers=headers,proxies=proxies)
    #加载json数据
    jsinfo=json.loads(req.content)
    #测试:打印爬取到的json数据
    print jsinfo[0]['count']
    #设置爬取频率
    time.sleep(5) #延时5秒


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guanmaoning/article/details/80040852

智能推荐

Mybatis - 基础篇_允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 j-程序员宅基地

文章浏览阅读1.6k次。文章目录Mybatis - 基础篇简述1 Mybatis是什么2 ORM是什么3 Hibernate 和 MyBatis 的区别入门案例1 基于XML的构建方式1.1 基本流程1.2 代码示例2 基于注解的构建方式配置/映射文件解析1 配置文件1.1 属性1.2 设置1.3 类型别名1.4 类型处理器1.5 对象工厂1.6 插件1.7 环境配置1.8 数据库厂商标识1.9 映射器2 映射文件2.1 SQL映射文件的顶级元素2.2 Select2.3 insert, update 和 delete2.4_允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的项目必须采用 j

Oracle内存全面分析(5)_v$library_cache_memory-程序员宅基地

文章浏览阅读659次。oracle目录(?)[-]转自httpwwwhellodbacomreaderphpID104langCN共享池的重要视图vshared_pool_adviceVSHARED_POOL_RESERVEDvdb_object_cachevsqlvsqlarea vsqltextvsql_planvlibrarycachevlibrary_cache_memory_v$library_cache_memory

初始化时checkbox选中问题-程序员宅基地

文章浏览阅读740次。首先我们大家在写页面的时候可能回经常遇到checkbox、radio等一些使选中或者是不选中的问题。这是我在项目当中做的时候发现的一个小知识点,把它赶紧记录下来。以便以后复习与巩固。 现把代码写出来再解释: function operateCheckOrRadio() { var sForm = document.getElementById("sform"); var sStatus = d..._flutter checkbox用变量初始化无法设置为选中状态

MySQL回滚日志(undo log)总结_mysql undo_log-程序员宅基地

文章浏览阅读2.6w次,点赞48次,收藏147次。一、undo log的概念undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志,在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。二、undo log的作用在MySQL中,undo log日志的作用主要有两个:1、提供回滚操作【undo log实现事务的原子性】我们在进行数据更新操作的时候,不仅会记录redo log,还会记录undo._mysql undo_log

RDD常用算子整理-程序员宅基地

文章浏览阅读1.7k次。相关算子整理1.Action2.Transformation3.key-valueRDD的操作4.缓存操作5. 共享变量from pyspark import SparkConf,SparkContextimport findspark findspark.init()conf=SparkConf().setAppName('RD').setMaster('local[*]')sc=SparkContext(conf=conf)1.Actioncollect将数据汇集到Driver_rdd常用算子

Bitmap API_bitmap 拷贝ninepatchchunk-程序员宅基地

文章浏览阅读6.1k次,点赞7次,收藏7次。1.简介Bitmap是Android系统中的图像处理的最重要类之一,通过bitmap可以获得图片的基本信息,以及对图片进行一系列的操作2.APIpublic boolean compress(CompressFormat format, int quality, OutputStream stream)把位图的压缩信息写入到指定的输出流.如果返回true,位图可以通过适当的输入流重建到BitmapF_bitmap 拷贝ninepatchchunk

随便推点

[回溯法]从蛮力算法起步,谈八皇后问题的求解:_蛮力法求八皇后问题-程序员宅基地

文章浏览阅读4.1k次。[回溯法]从蛮力算法起步,谈八皇后问题的求解: By EmilMatthew _蛮力法求八皇后问题

Elasticsearch Java REST Client 初始化、添加索引及数据_初始化 elasticsearchclient-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏13次。elasticsearch 初始化、创建索引、添加数据_初始化 elasticsearchclient

[tensorflow][原创]tensorflow objection_detection api官方安装执行model_builder_test.py没输出解决方法-程序员宅基地

文章浏览阅读1k次,点赞7次,收藏3次。安装后我按照网上执行pythonobject_detection/builders/model_builder_test.py但是没有反应,我安装的是tensorflow1.14版本。卸载后又装了tensorflow1.13,tensorflow1.15都一样。出于好奇我看了源码,原来model_builder_test.py就是一个类,当然没有输出,官方已经提供model_builder_tf1_test.py,然后我执行pythonobject_detection/builders/model_bu.._model_builder_test

mac苹果系统安装虚拟机方法教程 虚拟机操作之一_苹果系统下载虚拟机-程序员宅基地

文章浏览阅读4.4w次,点赞10次,收藏63次。1.先安装VirtualBox 和镜像文件。 软件官方网站下载:https://www.virtualbox.org/wiki/Downloads VirtualBox 百度网盘下载地址:百度网盘 密码:iaja镜像文件网盘地址:百度网盘 密码是z6vb2.傻瓜安装,其中,安装的时候‘最小安装’那一项记得选择‘工作站’,再进行设置。3.设置完毕。下..._苹果系统下载虚拟机

vue中v-show 实现上拉下拉菜单_avue怎么让选择框向上拉-程序员宅基地

文章浏览阅读906次。上拉下拉菜单<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="/_avue怎么让选择框向上拉

(java)五大常用算法_用java写出一个界面,使它支持五种算法的方法-程序员宅基地

文章浏览阅读453次。算法一:分治法基本概念1.把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。2.分治策略是对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问..._用java写出一个界面,使它支持五种算法的方法

推荐文章

热门文章

相关标签