我是好人,大好公民。好与坏,关键在用户!Scrapy是一种常用的数据收集工具;Selenium是一个浏览器自动化测试工具;结合Scrapy的数据处理机制和Selenium模拟真实浏览器获取数据(如:自动登录、自动翻页等)。收集可以做得更好。关于ScrapyScrapy是互联网上开发者常用的数据采集工具之一。通过API获取数据对于我们来说很常见,但一些网站出于“性能或安全”等原因,仍通过一定的技术手段刻意回避。API传输数据(如页面静态、一次性token等)。因此,为了能够收集到这些数据,我们可以分析站点和标签结构,然后借助Scrapy收集数据。简单介绍一下Scrapy框架的作用,它是如何帮助我们收集数据的?我们先看一下Scrapy的结构:Scrapy的数据流由ScrapyEngine控制,流程如下:初始化Engine,从Spider获取请求。将请求输入调度程序。调度器将Request一个一个发送给ScrapyEngine消费。ScrapyEngine通过下载器中间件向下载器发送请求。下载器将Request获得的页面作为Response结果返回给ScrapyEngine。ScrapyEngine接收到Downloader的Response并发送给Spider进行处理(SpiderMiddleware)。Spider处理Response并将Item返回给ScrapyEngine。ScrapyEngine将处理后的Item发送给ItemPipeline,同时将处理后的信号发送给调度器(Scheduler)请求下一次采集请求。重复以上步骤处理采集请求,直到Scheduler没有新的Request。Scrapy安装教程:https://doc.scrapy.org/en/lat...今天创建Scrapy项目,以青博大数据为案例,完成自动登录、自动搜索和数据采集。在文件根目录执行:scrapystartprojectqingbo,然后进入目录qingbo/执行:scrapygenspidercrawlgsdata.cn得到如下目录:qingbo/scrapy.cfg#部署配置文件qingbo/#项目的Python模块,你将从这里导入你的代码__init__.pyitems.py#项目项定义文件middlewares.py#浏览器的启动和访问方法在这里操作pipelines.py#处理后的数据最终在这里处理settings.py#项目设置文件spiders/#稍后将放置蜘蛛的目录__init__.pycrawl.py#访问的连接和爬取的数据在这里处理。其实,如何将Selenium与Scrapy结合起来,关键在于如何将其打包到middlewares.py中。可以参考这里:https://www.osgeo.cn/scrapy/t...关于SeleniumSelenium是一个开源的自动化测试框架,通过不同的浏览器和平台验证web应用。它目前支持多种语言调用,例如:Python、Java、PHP等。Selenium测试直接在浏览器中运行,就像真实用户一样,因此利用这一点可以更好地收集数据。PythonSelenium安装教程:https://selenium-python-zh.re...Selenium案例如果没有登录状态直接访问青博大数据腾讯视频如果不出意外,会跳转到登录页面,需要登录。Selenium的环境安装上面已经说了,这里直接上代码:打开站点.cn/member/login')driver.implicitly_wait(10)#打开页面需要加载时间,所以建议在登录操作中添加静默等待找到两个tab,分别是:二维码登录和青博账号登录。页面已经打开,如何进入青博账号登录选项卡?这里我们需要了解一下XPath(XMLPathLanguage),它是一种用来确定XML文档某部分位置的语言。简单的说,我们可以用Xpath定位“青博账号登录”标签页driver.find_element_by_xpath(".//div[@class='loginModal-content']/div/a[2]").click()然后找到账号密码框,填写信息:driver.find_element_by_xpath(".//input[@name='username']").send_keys("username")driver.find_element_by_xpath(".//input[@name='password']").send_keys("password")最后点击登录按钮:driver.find_element_by_xpath(".//div/button[@class='loginform-b??tn']").click()driver.implicitly_wait(5)登录成功!~查询操作driver.get('http://www.gsdata.cn/')driver.find_element_by_xpath(".//input[@id='search_input']").send_keys("腾讯视频")driver.find_element_by_xpath(".//button[@class='btnnobtn-defaultflsearch_wx']").click()driver.implicitly_wait(5)查找后得到如下结果:通过Xpath定位到腾讯视频的a标签,然后点击进入腾讯视频的数据内容页面:driver.find_element_by_xpath(".//ul[@class='imgword-list']/li[1]/div[@class='img-word']/div[@class='word']/h1/a").click()driver.implicitly_wait(5)内容页面来了,是不是很惊喜?现在就可以通过Xpath定位获取需要的内容进行处理了,这里就不赘述了。关闭操作driver.close()获取到数据后,如果没有其他操作,可以关闭浏览器。小结本章介绍了Scrapy和Selenium的基本概念和一般用法。一般来说,它可以帮助我们在解决一些问题时提供新的解决方案和思路。参考https://www.cnblogs.com/luozx...https://kite.com/blog/python/...https://docs.scrapy.org/en/la...
