`
uule
  • 浏览: 6323864 次
  • 性别: 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.开始爬取即可

分享到:
评论

相关推荐

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

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

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

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

    DJango跟Scrapy爬虫框架实现-ScrapydAPI

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

    精通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)来模拟浏览器行为,都是提高爬虫能力的有效途径。

    bili_danmu_爬虫_CRAWL_scrapy_

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

    Scrapy爬虫

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

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

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

    python爬虫:爬取动态网页内容

    总之,爬取动态网页内容需要对网页渲染机制有深入理解,并利用如Selenium、Puppeteer、Playwright或Scrapy-Splash等工具模拟浏览器行为。这些技术可以帮助我们更全面地抓取和解析那些传统爬虫难以触及的数据。在实际...

    爬虫电商项目:用scrapy分布式爬虫框架爬取当当商品信息,用selenium模拟登录淘宝和京东收集商.zip

    在这个名为"爬虫电商项目:用scrapy分布式爬虫框架爬取当当商品信息,用selenium模拟登录淘宝和京东收集商-ecommerce"的压缩包文件中,包含了一个名为"ecommerce-master"的项目,这显然是一个电商数据爬取的实例。...

    python爬虫开发题答案及题目-100(1).zip

    - 网络爬虫:模拟浏览器发送HTTP请求,获取服务器响应,解析HTML等网页内容,提取所需信息。 - 请求与响应:了解HTTP协议中的GET和POST请求,以及响应的状态码和头信息。 - HTML解析:理解HTML结构,使用...

    scrapy_Python的爬虫框架Scrapy_scrapy_

    例如,可以使用User-Agent中间件模拟浏览器行为,或者使用Retry中间件处理网络错误。 7. **Scrapy Shell** Scrapy Shell是一个交互式环境,用于调试和测试XPath或CSS选择器。你可以直接在Shell中输入URL,获取响应...

    基于scrapy的智联职位爬虫

    6. **Middleware(中间件)**:中间件是一系列可插入的钩子,它们可以在Spider的输入和输出之间进行干预,比如处理HTTP错误、模拟浏览器行为、添加User-Agent等。 在实现“基于scrapy的智联职位爬虫”时,首先需要...

    个人整理的python爬虫:个人代码和笔记合集

    学习Scrapy,你需要了解其项目结构、爬虫编写、中间件的使用,以及如何配置和运行Scrapy项目。 这些资料涵盖了Python爬虫的基础到进阶,从简单的URL请求到复杂的浏览器自动化,再到高效爬取框架的使用,将帮助你...

    Python爬虫的学习历程.zip

    3. 动态加载爬虫:针对JavaScript渲染的网页,使用Selenium或Pyppeteer模拟浏览器行为抓取数据。 4. 分布式爬虫:利用Scrapy框架,设计一个分布式爬虫系统,实现大规模数据的抓取。 五、法律法规与道德规范 在进行...

Global site tag (gtag.js) - Google Analytics