好与坏,关键在于大大的噢!使用者噢~~

优采云 发布时间: 2021-08-18 19:11

  好与坏,关键在于大大的噢!使用者噢~~

  我是一个好人,一个伟大的恩人。

  好与坏的关键在于用户!

  Scrapy是一个常用的数据采集工具;

  Selenium 是一个浏览器自动化测试工具;

  结合Scrapy的数据处理机制和Selenium,模拟真实浏览器获取数据(如:自动登录、自动翻页等)。 采集可以做得更好。

  关于 Scrapy

  Scrapy 是开发者在互联网上常用的数据采集 工具之一。我们已经习惯了通过 API 获取数据,但是一些网站出于“性能或安全”的原因仍然使用某些技术。该方法特意避开API传输数据(如静态页面、一次性令牌等)。因此,为了能够采集得到这些数据,我们可以分析站点和标签结构,然后通过使用Scrapy采集数据。

  简单介绍一下Scrapy框架的作用,具体怎么帮我们采集数据?先来看看Scrapy的结构:

  

  Scrapy 的数据流由 Scrapy Engine 控制,流程如下:

  引擎初始化并获取来自 Spider 的请求。将请求放入调度程序。调度器将 Requests 一一发送给 Scrapy Engine 进行消费。 Scrapy Engine 通过下载器中间件将请求发送给下载器。下载器将Request获取的页面作为响应结果返回给Scrapy Engine。 Scrapy Engine 接收来自 Downloader 的 Response 并将其发送到 Spider Middleware 进行处理。 Spider 处理响应并将项目返回给 Scrapy 引擎。 Scrapy Engine将处理后的item发送到Item Pipeline,同时将处理后的信号发送给调度器(Scheduler)请求下一个采集请求。

  重复以上步骤处理采集请求,直到调度器中没有新的请求。

  Scrapy 安装教程:

  Scrapy 项目创建

  今天以清博大数据为例,完成自动登录、自动搜索、数据采集。

  在文件根目录执行:

  scrapy startproject qingbo

  然后进入目录qingbo/并执行:

  scrapy genspider crawl gsdata.cn

  获取以下目录:

  qingbo/

scrapy.cfg # deploy configuration file

qingbo/ # project's Python module, you'll import your code from here

__init__.py

items.py # project items definition file

middlewares.py # 浏览器的启动和访问方式在这操作

pipelines.py # 处理好后的数据在这做最后处理

settings.py # project settings file

spiders/ # a directory where you'll later put your spiders

__init__.py

crawl.py # 访问的连接和爬取后的数据在这里处理

  其实在Scrapy中如何结合Selenium的关键在middlewares.py

  具体的封装方法请参考:

  关于硒

  Selenium 是一种开源自动化测试框架,可通过不同的浏览器和平台验证 Web 应用程序。目前支持Python、Java、PHP等多种语言调用

  Selenium 测试直接在浏览器中运行,就像真实用户一样,因此您可以利用这一点更好地执行数据采集。

  Python Selenium 安装教程:

  硒案例

  未登录可直接访问青博大数据腾讯视频

  如果没有任何反应,会跳转到登录页面进行登录。Selenium的环境安装上面已经讲到了,这里直接上代码:

  网站打开

  options = Options()

options.headless = False

driver = webdriver.Firefox(options=options)

driver.get('https://u.gsdata.cn/member/login')

driver.implicitly_wait(10) # 页面打开需要加载时间,所以建议加个静默等待

  

  登录操作

  可以找到两个选项卡,分别是:二维码登录和清博账号登录。

  页面已经打开,如何进入清博账号登录标签?

  这里我们需要了解Xpath(XML Path Language),它是一种用于确定XML文档某部分位置的语言。

  简单来说,我们可以使用Xpath定位到“清博账户登录”的Tab

  

  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.get('http://www.gsdata.cn/')

driver.find_element_by_xpath(".//input[@id='search_input']").send_keys("腾讯视频")

driver.find_element_by_xpath(".//button[@class='btn no btn-default fl search_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 的基本概念和一般用法。总的来说,它可以帮助我们在解决一些问题时提供新的解决方案和思路。

  参考

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线