安装 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命令, 先后安装 Twisted 和 scrapy
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
 沙滩星空的博客
沙滩星空的博客