沙滩星空的博客沙滩星空的博客

Scrapy爬虫框架安装和使用

安装 scrapy

python -m pip install scrapy

安装可能出现错误,因为 Twisted 安装失败:

Running setup.py install for Twisted ... error

解决:手动下载 Twisted 包,并用 pip 命令安装。

https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
全局搜索 Twisted,找到各版本的whl文件下载链接。根据自己py版本及系统下载对应版本安装.

Twisted: an event-driven networking engine.
Twisted‑20.3.0‑cp39‑cp39‑win_amd64.whl
......

我下载的是 Twisted‑20.3.0‑cp39‑cp39‑win_amd64.whl
用pip命令, 先后安装 Twistedscrapy

pip install Twisted-19.2.0-cp37-cp37m-win_amd64.whl
pip install scrapy

使用

# 创建爬虫项目
scrapy startproject <project_name>
# 进入项目文件夹
cd project_name
# 创建指定域名的爬虫
scrapy genspider <spider_name> <domain_name>
# 运行爬虫
scrapy crawl <spider_name>

使用selenium

更改网络请求方式为 selenium ,修改 middlewares.py文件里面的 下载器中间件 Downloader Middleware

在中间件中,对request进行处理的方法是:

def process_request(self, request, spider):

在 process_request 函数方法中,调用 selenium,获取js加载后的完整页面,代码如下:

def process_request(self, request, spider):
 
    content = self.selenium_request(request.url);
    if content.strip() != '':
        return HtmlResponse(request.url, encoding='utf-8', body=content, request=request)
    return None
    # return None
    return HtmlResponse(request.url, encoding='utf-8', body=content, request=request)

selenium获取页面浏览器内容

def selenium_request(self, url):
    # js控制浏览器滚动到底部js
    js = """
    function scrollToBottom() {
        var Height = document.body.clientHeight,  //文本高度
            screenHeight = window.innerHeight,  //屏幕高度
            INTERVAL = 100,  // 滚动动作之间的间隔时间
            delta = 500,  //每次滚动距离
            curScrollTop = 0;    //当前window.scrollTop 值
        console.info(Height)
        var scroll = function () {
            //curScrollTop = document.body.scrollTop;
            curScrollTop = curScrollTop + delta;
            window.scrollTo(0,curScrollTop);
            console.info("偏移量:"+delta)
            console.info("当前位置:"+curScrollTop)
        };
        var timer = setInterval(function () {
            var curHeight = curScrollTop + screenHeight;
            if (curHeight >= Height){   //滚动到页面底部时,结束滚动
                clearInterval(timer);
            }
            scroll();
        }, INTERVAL)
    };
    scrollToBottom()
    """
    chrome_options = webdriver.ChromeOptions()
    # headless无界面模式
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-gpu")
    driver = webdriver.Chrome(chrome_options=chrome_options,executable_path="D:\\开发\chromedriver_win32\\chromedriver")
    driver.get(url)
    # driver.maximize_window();# 窗口最大化
    # 执行js滚动浏览器窗口到底部
    driver.execute_script(js)
    # time.sleep(5)  # 不加载图片的话,这个时间可以不要,等待JS执行
    # driver.get_screenshot_as_file("C:\\Users\\Administrator\\Desktop\\test.png")
    content = driver.page_source.encode('utf-8')
    # driver.quit()
    driver.close()
    # return None
    return content

最后开启下载中间件,在settings.py文件中

DOWNLOADER_MIDDLEWARES = {
   'mytest.middlewares.MytestDownloaderMiddleware': 543,
}

官网 https://docs.scrapy.org/
Scrapy+ChromeDriver+Selenium爬取动态html页面 https://blog.csdn.net/fuck487/article/details/80852580
Scrapy爬虫框架,入门案例 https://blog.csdn.net/ck784101777/article/details/104468780/
py3.7安装Scrapy及安装时的 Running setup.py install for Twisted ... error 和安装后的 Unhandled error in Deferred: https://www.cnblogs.com/dajie/p/11223775.html

未经允许不得转载:沙滩星空的博客 » Scrapy爬虫框架安装和使用

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址