安装 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