`
uule
  • 浏览: 6358521 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Scrapy爬虫:模拟浏览器和使用代理

 
阅读更多

采用settings.py的方式进行设置user agent和proxy列表

http://www.tuicool.com/articles/VRfQR3U

http://jinbitou.net/2016/12/01/2229.html(本人用的这种)

 

网站的反爬虫策略:

http://www.cnblogs.com/tyomcat/p/5447853.html

 

1.在settings.py同级目录下新建文件useragent.py

# -*-coding:utf-8-*-
from scrapy import log
import logging

import random
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
class UserAgent(UserAgentMiddleware):

    def __init__(self, user_agent=''):
        self.user_agent = user_agent

    def process_request(self, request, spider):
        ua = random.choice(self.user_agent_list)
        if ua:
            #显示当前使用的useragent
            #print "********Current UserAgent:%s************" %ua
            #记录
            log.msg('Current UserAgent: '+ua, level=logging.DEBUG)
            request.headers.setdefault('User-Agent', ua)

    #the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape
    #for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
    user_agent_list = [\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
        "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
       ]

 

2.在settings.py同级目录新建文件proxymiddlewares.py

# -*- coding: utf-8 -*-
import random, base64


class ProxyMiddleware(object):

    proxyList = [ \
        '121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843'    
        ]

    def process_request(self, request, spider):
        # Set the location of the proxy
        pro_adr = random.choice(self.proxyList)
        print("USE PROXY -> " + pro_adr)
        request.meta['proxy'] = "http://" + pro_adr

 

3.修改settings.py (注意DOWNLOADER_MIDDLEWARES)

# -*- coding: utf-8 -*-

BOT_NAME = 'ip_proxy_pool'

SPIDER_MODULES = ['ip_proxy_pool.spiders']
NEWSPIDER_MODULE = 'ip_proxy_pool.spiders'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {
   'ip_proxy_pool.pipelines.IpProxyPoolPipeline': 300,
}

#爬取间隔
DOWNLOAD_DELAY = 1

# 禁用cookie
COOKIES_ENABLED = False


# 重写默认请求头
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html, application/xhtml+xml, application/xml',
  'Accept-Language': 'zh-CN,zh;q=0.8',
  'Host':'ip84.com',
  'Referer':'http://ip84.com/',
  'X-XHR-Referer':'http://ip84.com/'
}

#激活自定义UserAgent和代理IP
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
   'ip_proxy_pool.useragent.UserAgent': 1,
   'ip_proxy_pool.proxymiddlewares.ProxyMiddleware':100,
   'scrapy.downloadermiddleware.useragent.UserAgentMiddleware' : None,
}

 

 

4.开始爬取即可

分享到:
评论

相关推荐

    Python爬虫是指使用Python语言编写的爬虫程序,这种程序可以从网络上爬取数据,并将爬取的数据存储在本地或数据库中 下面是

    Selenium:一个自动化浏览器的工具,用于模拟用户行为和爬取数据。 文档和教程: Scrapy官方文档:提供了Scrapy框架的详细文档和示例代码。 Python爬虫教程:是一个在线教程,涵盖了Python爬虫的基本概念和实践。 ...

    完整版精品Python网络爬虫教程 数据采集 信息提取课程 12-实例4-股票数据定向Scrapy爬虫(共23页).pptx

    提高Scrapy爬虫爬取速度的方法有很多,比如优化请求策略(如延迟请求、并发请求)、使用分布式爬虫(如Scrapy-Redis)、设置下载中间件来处理反爬机制、或者利用缓存减少重复请求。同时,理解网站的反爬策略并适当地...

    scrapy模拟知乎登录并获取知乎用户的信息

    - **Selenium**:在模拟登录时,我们使用Selenium库,这是一个自动化测试工具,可以模拟浏览器行为。在Scrapy中,我们可以通过Selenium来执行JavaScript,处理验证码、动态加载内容以及填写表单等任务。对于知乎...

    DJango跟Scrapy爬虫框架实现-ScrapydAPI

    Scrapyd是Scrapy的一个扩展,它提供了一个服务,可以部署和管理Scrapy爬虫项目。通过Scrapyd API,我们可以远程调度爬虫运行,获取爬虫结果,这在分布式爬虫或需要定时任务的场景中尤其有用。 以下是如何使用这些...

    scrapy分布式爬虫(爬虫项目与总结资料)

    Scrapy具有强大的中间件系统,可以方便地定制爬取行为,如处理cookies、重试失败的请求、模拟浏览器行为等。同时,Scrapy内置了对XPath和CSS选择器的支持,便于提取网页数据。 二、Scrapy分布式爬虫原理 Scrapy...

    精通Scrapy网络爬虫_python_scrapy_

    6. **Downloader Middleware**:下载中间件是一系列钩子,可以修改Scrapy的下载过程,例如处理cookies、模拟浏览器行为或处理重定向。 7. **Spider Middleware**:蜘蛛中间件位于Spider和Scrapy引擎之间,可以对...

    根据关键词使用scrapy爬取今日头条网站新闻各类信息和内容页

    本项目是关于使用Scrapy爬虫框架抓取今日头条网站上与特定关键词相关的新闻信息和内容页面。Scrapy是一个强大的Python爬虫框架,适用于构建复杂的爬虫项目,能够高效地处理网络请求、解析HTML内容以及管理爬取的数据...

    Python网络爬虫实战-Scrapy14-17

    Selenium是一个浏览器自动化工具,可以直接模拟浏览器行为;Splash是Scrapy推荐的一个轻量级HTTP服务器,它可以执行JavaScript并返回渲染后的HTML,适合与Scrapy配合使用。通过这些工具,我们可以抓取到那些依赖...

    豆瓣scrapy爬虫

    【标题】:“豆瓣scrapy爬虫”是指使用Python的Scrapy框架开发的,用于抓取豆瓣网站上Top50电影数据的爬虫程序。Scrapy是一个强大的、高效的爬虫框架,专为网络抓取和数据提取设计,适用于各种规模的项目。 【描述...

    基于scrapy框架的智联招聘爬虫

    2. **使用Scrapy中间件**:Scrapy的中间件可以拦截和修改爬虫的请求和响应。对于Ajax加载的数据,我们可以编写一个中间件来模拟这些请求,发送到服务器并接收返回的数据。 3. **解析HTML和Json数据**:Ajax请求通常...

    python爬虫: 1、记录捕获各网站的数据 2、逆向JS(请求数据加密、响应数据解密)

    同时,持续关注网络爬虫的发展,学习新的库和技术,如Selenium用于处理动态加载的内容,或使用Puppeteer(Python的headless Chrome库如SeleniumWire)来模拟浏览器行为,都是提高爬虫能力的有效途径。

    完整版精品Python网络爬虫教程 数据采集 信息提取课程 11-Scrapy爬虫基本使用(共32页).pptx

    10-Scrapy爬虫框架和11-Scrapy爬虫基本使用中,你将学习如何搭建Scrapy工程,创建Spider,配置中间件和管道(Pipelines)。Scrapy的项目结构清晰,如`items.py`定义爬取的数据模型,`middlewares.py`自定义中间件,`...

    163Music-master_爬虫_MongoDB_网易云音乐_scrapy_

    1. **动态加载**:许多网页内容是通过JavaScript动态加载的,需要使用如Selenium或Scrapy的Splash中间件来模拟浏览器执行JavaScript。 2. **反爬策略**:网易云音乐可能会有反爬机制,如IP限制、User-Agent检测等,...

    scrapy爬取豆瓣,携程代码,动态加载页面等

    总的来说,通过Scrapy框架,我们可以有效地解决Python爬虫的各种挑战,无论是处理动态加载的页面,还是模拟浏览器行为,都可以在遵循最佳实践的同时,高效地抓取和分析网络数据。这些技能在数据分析、市场研究、内容...

    scrapy爬虫教程

    ### scrapy爬虫教程知识点解析 #### 一、Scrapy概览与入门 ##### 1.1 Scrapy简介 - **定义**: Scrapy是一款用于爬取网站并从页面中提取结构化数据的应用框架,广泛应用于数据挖掘、信息处理或历史归档等领域。 - *...

    bili_danmu_爬虫_CRAWL_scrapy_

    【标题】"bili_danmu_爬虫_CRAWL_scrapy_" 指的是一个使用Scrapy框架编写的爬虫程序,其主要任务是抓取B站...通过理解以上知识点,我们可以构建一个能够从B站抓取弹幕信息的Scrapy爬虫,从而获取有价值的用户行为数据。

    Scrapy爬虫

    6. **Middleware**:Middleware是Scrapy框架中处理Request和Response的组件,可以用来实现自定义的请求和响应处理,如模拟浏览器行为、设置代理、处理cookies、管理session等。 7. **Settings**:Scrapy设置允许你...

    Python爬虫开发与项目实战.pdf

    8. 高级爬虫技术:讲述如何使用代理、设置延时、模拟浏览器行为等技术进行复杂的爬取。 9. 实战项目:通过构建一个或多个实际的爬虫项目来巩固前面学习的知识。 10. 爬虫框架:介绍Scrapy等流行的Python爬虫框架,...

    Scrapy爬虫系列及实战项目教程(FBP内部学习,禁止传播)1

    Scrapy是一个强大的Python爬虫框架,它简化了网络数据抓取和处理的过程。在本教程中,我们将深入探讨如何使用Scrapy创建一个...通过理解这些核心组件和配置,你可以轻松地开始Scrapy爬虫项目并实现自己的数据抓取需求。

    浏览器爬虫必备,获取浏览器的cookie

    使用Python爬虫库,如Requests和Scrapy,可以模拟浏览器请求,获取到浏览器的Cookie。 三、Python爬虫获取Cookie的实现 使用Python爬虫库获取Cookie需要使用CookieJar对象,下面是一个简单的示例代码: ``` ...

Global site tag (gtag.js) - Google Analytics