动态网页抓取(就是动态网站爬取的思路与操作步骤(一)-苏州安嘉)

优采云 发布时间: 2021-12-13 20:16

  动态网页抓取(就是动态网站爬取的思路与操作步骤(一)-苏州安嘉)

  导言

  在日常爬行过程中,动态网站爬行更麻烦,因为动态网站数据是动态加载的。此时,我们需要使用selenium中间件来模拟操作并获取动态数据

  开始创建项目

  1.scrapy startproject Taobao

复制代码

  2.cd Taobao

复制代码

  3. scrapy genspider taobao www.taobao.com

复制代码

  开放项目

  首先,让我们不要爬行。首先,在设置中将爬虫规则设置为false

  ROBOTSTXT_OBEY = False

复制代码

  我们在终点站输入

   scrapy view "http://www.taobao.com"

复制代码

  此时,您将发现您爬网到的页面如下所示:

  

  可以发现爬网的页面是一个没有数据的空帧。这个时候我该怎么办??我们将使用selenium中间件

  让我们关注淘宝下载器中间件中的process_请求功能。让我们添加一行代码以查看效果:

   def process_request(self, request, spider):

# Called for each request that goes through the downloader

# middleware.

# Must either:

# - return None: continue processing this request

# - or return a Response object

# - or return a Request object

# - or raise IgnoreRequest: process_exception() methods of

# installed downloader middleware will be called

print("------我是中间件,请求经过我------")

return None

复制代码

  然后在会议中,删除以下评论

  DOWNLOADER_MIDDLEWARES = {

'Taobao.middlewares.TaobaoDownloaderMiddleware': 543,

}

复制代码

  让我们运行它以查看效果:

  scrapy view "http://www.taobao.com"

复制代码

  效果:

  ------我是中间件,请求经过我------

2018-08-29 15:38:21 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to from

------我是中间件,请求经过我------

2018-08-29 15:38:21 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)

复制代码

  结果表明,该中间件是有效的。如果我们在中间件中模拟一些操作,我们可以获得动态数据吗

  中间件的操作

  首次*敏*感*词*硒

  from selenium import webdriver

#无界面运行

from selenium.webdriver.chrome.options import Options

复制代码

  进程中\在请求函数中编写以下代码

   def process_request(self, request, spider):

# Called for each request that goes through the downloader

# middleware.

print("------我是中间件,请求经过我------")

#设置无界面运行

option = Options()

option.add_argument("--headless")

#创建一个driver对象

#driver = webdriver.Chrome()

driver = webdriver.Chrome(chrome_options=option)

#等待15秒

driver.implicitly_wait(15)

driver.get(request.url)

# 让页面滚动最底层 模拟人的操作

js = 'window.scrollTo(0,document.body.scrollHeight)'

# 执行js

driver.execute_script(js)

# 获取内容

content = driver.page_source

from scrapy.http import HtmlResponse

# 创建一个resp对象返回至解析函数

resp = HtmlResponse(request.url,request=request,body=content,encoding='utf-8')

return resp

return None

复制代码

  那么这个动态数据呢,这个时候已经得到了,在这里就不进行分析了。以上是动态网站爬行的思想

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线