scrapy使用selenium来应对反爬

scrapy的架构图如下:

%title插图%num

在下载组件和scrapy引擎中间有一个DownloaderMiddleware(下载中间件)中间件,通过修改这个中间件,使得scrapy通过无头浏览器来下载网页内容!

%title插图%num

如左图所示,在这个文件里面修改scrapy中间件。

以下定义一个最简单的chrome浏览器来爬取网页!

class SeleniumMiddleware(object):
    def __init__(self):
        self.logger = getLogger(__name__)
        self.browser = webdriver.Chrome()
        self.browser.set_window_size(1400, 700)

    def __del__(self):
        """
        用于关闭浏览器
        :return: 
        """
        self.browser.close()

    def process_request(self, request, spider):
        """
        用chrome抓取页面
        :param request: Request对象
        :param spider: Spider对象
        :return: HtmlResponse
        """
        self.logger.debug('Chrome is Starting')
        self.browser.get(request.url)
        content = self.browser.page_source.encode('utf-8')
        if content.strip() != '':
            return HtmlResponse(request.url, encoding='utf-8', body=content, request=request)
        return None

    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders.
        # Scrapy使用此方法创建您的蜘蛛。
        return cls()

接下来就需要setting.py文件中开启这一个中间件:

DOWNLOADER_MIDDLEWARES = {
    'taobao.middlewares.SeleniumMiddleware': 543,
}

这里因为已经把下载的中间件设置为了自己自定义的,所以scrapy原本自带的下载中间件就不会再生效了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇