环境搭建

安装

安装python爬虫框架scrapy

$ pip install scrapy

由于页面是动态渲染的,所以采用打开浏览器的方式进行数据爬取,所以需要安装selenium

$ pip install selenium

脚手架搭建

  1. 创建项目命令:scrapy startproject “项目名”

  2. 创建爬虫文件命令:scrapy genspider “爬虫名” “爬虫范围”

  3. 启动一个爬虫:scrapy crawl “爬虫名字”

$ scrapy startproject wyspider
$ scrapy genspider home guahao.com
$ scrapy crawl home

scrapy框架

  1. Scrapy Engine(引擎): 负责SpiderItemPipelineDownloaderScheduler中间的通讯,信号、数据传递等。

  2. Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  3. Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

  4. Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

  5. Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

  6. Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

  7. Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

scrapy框架流程

start_urls快速走了一遍流程再开始parse()

  1. 引擎拿到request请求发送给调度器整理入列

  2. 调度器返回request请求给引擎

  3. 引擎发送request请求给下载器

  4. 下载器前往互联网进行下载response返回给引擎

  5. 引擎把response返回给爬虫

  6. 爬虫返回items或者request给引擎

  7. items返回给管道,request进行下一轮循环

中间件

编写编写

这次的目标暂定为打开一个页面后截图进行保存,所以我们在中间件中操作截图

class ChromeSpiderMiddleware(object):def save_screenshot(self, spider):file_name = f'{spider.driver.title}_{int(time.time() * 1000)}.png'spider.driver.save_screenshot(f'{LOG_PATH}/{file_name}')logger.info(f'爬取的地址为:{spider.driver.current_url},页面名称为:{spider.driver.title},截图名称为:{file_name}')def process_request(self, request, spider):spider.driver.get(request.url)time.sleep(0.5)self.save_screenshot(spider)html = spider.driver.page_sourcereturn scrapy.http.HtmlResponse(url=request.url, body=html.encode('utf-8'), encoding='utf-8',request=request)

开启中间件

settings.py中修改DOWNLOADER_MIDDLEWARES

DOWNLOADER_MIDDLEWARES = {'wyspider.middlewares.ChromeSpiderMiddleware': 543,
}

编写爬虫

设置爬取范围与初始爬取地址

  • 爬取范围:allowed_domains

  • 初始爬取地址:base_url

class HomeSpider(scrapy.Spider):name = 'home'allowed_domains = ['guahao.com']base_url = 'https://wy.guahao.com'start_urls = [base_url]

打开浏览器

在最开始爬取的时候,需要先打开浏览器,建议采用无头浏览器

def __init__(self):super(HomeSpider, self).__init__(name=self.name)chrome_option = Options()chrome_option.add_experimental_option('mobileEmulation', {'deviceName': 'iPhone X'})chrome_option.add_experimental_option('w3c', False)desired_capabilities = DesiredCapabilities.CHROMEdesired_capabilities["pageLoadStrategy"] = "eager"chrome_option.add_argument('--headless')chrome_option.add_argument('--disable-gpu')chrome_option.add_argument('--no-sandbox')self.driver = webdriver.Chrome(executable_path=f'{TOOL_PATH}/chromedriver',chrome_options=chrome_option,desired_capabilities=desired_capabilities)

爬虫主体

找到页面上a标签的链接

然后与基础url进行拼接

打开新的页面后递归调用爬虫函数

继续在新打开的页面中找到a标签地址

直到没有a标签或者超出运行爬取的域名外结束爬虫

def parse(self, response):url_list = response.xpath('//a/@href').extract()url_list = [i.strip() for i in url_list if 'javascript:' not in i]logger.info(f'爬取的地址列表为:{url_list}')for url in url_list:if url.startswith("http"):link = urlelse:link = self.base_url + urllogger.info(f'爬取的地址为:{link}')yield scrapy.Request(url=link, callback=self.parse)

执行日志

下面是最开始的第一条爬虫数据,打开了首页,然后再首页找到了n个链接,依次进入链接后进行截图,并重复开始的流程

2021-11-01 10:25:04,444-INFO-python:爬取的地址为:https://wy.guahao.com/,页面名称为:微医(挂号网)-互联网医院在线诊疗平台,截图名称为:微医(挂号网)-互联网医院在线诊疗平台_1635733502798.png
2021-11-01 10:25:09,005-INFO-python:爬取的地址列表为:['/home/search', 'https://hmall.guahao.com/activity/42d771de31734906b73a8437e0e124b7', 'https://vip.guahao.com', 'https://hd.guahao.com/u/29691?channelNumber=C0039N2489K', 'https://hd.guahao.com/u/28844?channelNumber=C0039N2489K', 'https://hd.guahao.com/u/29597?_channel=hdyx026a&huiyuanzhuanshu', 'https://hd.guahao.com/u/28963?_channel=hdyx005a', 'https://weex.guahao.com/weex/alias/portal/special-disease/more', 'https://app.wy.guahao.com/medical-examination?app_disable_navbar=1&frompage=home', 'https://hd.guahao.com/u/28160?cp=fjjwyapp', 'https://industry.guahao.com/as?source_id=51111', 'https://industry.guahao.com/activity/a5666e96aa7c4e4d9f34f09a25c79b58?source_id=40948&_cp=my713', 'https://hd.guahao.com/u/28475', 'https://wy.guahao.com/ums/cdm?diseaseCode=39816&_cp=tnbapp', 'https://hd.guahao.com/u/28822?gytx1=', 'https://industry-consume.guahao.com/activity/09f0fe82ab9f45928e6b78a5d17ad85c?trace=appzbzk', 'https://wy.guahao.com/home/tumor-hospital', 'https://www.wjx.cn/vj/tjAgy5b.aspx', 'https://doctorbridge.guahao.com/app/list', 'https://hmall.guahao.com/index', 'https://hmall.guahao.com/opt/item/492747083989835776', 'https://hmall.guahao.com/opt/item/541605568869101568', 'https://hmall.guahao.com/opt/item/528150867959934976', 'https://hmall.guahao.com/opt/item/492765816078655488', 'https://hmall.guahao.com/opt/item/515100617632444416', 'https://hmall.guahao.com/opt/item/497746177573322752', '/', '/consult/doctor', '/guide/disease', '/my/follow/expertlist', '/navigation', '/my/profile']
2021-11-01 10:25:09,006-INFO-python:爬取的地址为:https://wy.guahao.com/home/search
2021-11-01 10:25:10,285-INFO-python:爬取的地址为:https://wy.guahao.com/home/search,页面名称为:搜索,截图名称为:搜索_1635733510041.png
2021-11-01 10:25:12,468-INFO-python:爬取的地址为:https://wy.guahao.com/consult/portal,页面名称为:在线问诊,截图名称为:在线问诊_1635733512095.png
2021-11-01 10:25:12,500-INFO-python:爬取的地址为:https://hmall.guahao.com/activity/42d771de31734906b73a8437e0e124b7
2021-11-01 10:25:12,500-INFO-python:爬取的地址为:https://vip.guahao.com
2021-11-01 10:25:12,501-INFO-python:爬取的地址为:https://hd.guahao.com/u/29691?channelNumber=C0039N2489K
2021-11-01 10:25:12,501-INFO-python:爬取的地址为:https://hd.guahao.com/u/28844?channelNumber=C0039N2489K
2021-11-01 10:25:12,502-INFO-python:爬取的地址为:https://hd.guahao.com/u/29597?_channel=hdyx026a&huiyuanzhuanshu
2021-11-01 10:25:12,502-INFO-python:爬取的地址为:https://hd.guahao.com/u/28963?_channel=hdyx005a
2021-11-01 10:25:12,503-INFO-python:爬取的地址为:https://weex.guahao.com/weex/alias/portal/special-disease/more
2021-11-01 10:25:12,504-INFO-python:爬取的地址为:https://app.wy.guahao.com/medical-examination?app_disable_navbar=1&frompage=home
2021-11-01 10:25:12,504-INFO-python:爬取的地址为:https://hd.guahao.com/u/28160?cp=fjjwyapp
2021-11-01 10:25:12,505-INFO-python:爬取的地址为:https://industry.guahao.com/as?source_id=51111
2021-11-01 10:25:12,506-INFO-python:爬取的地址为:https://industry.guahao.com/activity/a5666e96aa7c4e4d9f34f09a25c79b58?source_id=40948&_cp=my713
2021-11-01 10:25:12,506-INFO-python:爬取的地址为:https://hd.guahao.com/u/28475
2021-11-01 10:25:12,507-INFO-python:爬取的地址为:https://wy.guahao.com/ums/cdm?diseaseCode=39816&_cp=tnbapp
2021-11-01 10:25:12,507-INFO-python:爬取的地址为:https://hd.guahao.com/u/28822?gytx1=
2021-11-01 10:25:12,508-INFO-python:爬取的地址为:https://industry-consume.guahao.com/activity/09f0fe82ab9f45928e6b78a5d17ad85c?trace=appzbzk
2021-11-01 10:25:12,509-INFO-python:爬取的地址为:https://wy.guahao.com/home/tumor-hospital
2021-11-01 10:25:12,509-INFO-python:爬取的地址为:https://www.wjx.cn/vj/tjAgy5b.aspx
2021-11-01 10:25:12,510-INFO-python:爬取的地址为:https://doctorbridge.guahao.com/app/list

截图

使用Scrapy框架爬取微医H5数据相关推荐

  1. scrapy框架爬取王者荣耀英雄数据

    scrapy框架爬取王者荣耀英雄属性 爬虫工程 爬虫文件 import scrapy from theKingPro.items import ThekingproItemclass ThekingS ...

  2. python中scrapy可以爬取多少数据_python中scrapy框架爬取携程景点数据

    ------------------------------- [版权申明:本文系作者原创,转载请注明出处] 文章出处:https://blog.csdn.net/sdksdk0/article/de ...

  3. 爬虫入门(四)——Scrapy框架入门:使用Scrapy框架爬取全书网小说数据

    为了入门scrapy框架,昨天写了一个爬取静态小说网站的小程序 下面我们尝试爬取全书网中网游动漫类小说的书籍信息. 一.准备阶段 明确一下爬虫页面分析的思路: 对于书籍列表页:我们需要知道打开单本书籍 ...

  4. scrapy获取a标签的连接_python爬虫——基于scrapy框架爬取网易新闻内容

    python爬虫--基于scrapy框架爬取网易新闻内容 1.需求[前期准备] 2.分析及代码实现(1)获取五大板块详情页url(2)解析每个板块(3)解析每个模块里的标题中详情页信息 点击此处,获取 ...

  5. 利用python的scrapy框架爬取google搜索结果页面内容

    scrapy google search 实验目的 爬虫实习的项目1,利用python的scrapy框架爬取google搜索结果页面内容. https://github.com/1012598167/ ...

  6. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云

    基于Scrapy框架爬取豆瓣<复联4>影评,并生成词云 1. 介绍及开发环境 2. 爬虫实现 2.1 新建项目 2.2 构造请求 2.3 提取信息 2.4 数据存储 2.4 运行结果 3. ...

  7. 03_使用scrapy框架爬取豆瓣电影TOP250

    前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关 ...

  8. scrapy框架爬取网站图片

    使用scrapy 框架爬取彼岸图库 前言: 这两天在网上学习了一下scrapy框架,发现及其好用,把爬虫步骤分的细细的.所以写了一个简单项目回顾一下并分享给大家^ . ^ 源码我已经放到Github了 ...

  9. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

最新文章

  1. 全民捡破烂,转转和闲鱼谁能胜出?
  2. 详解math.isclose()用法
  3. mysql严格模式 报错_代码一上传服务器就报错-尝试开启 MySQL 严格模式
  4. gitHub网站上常见英语翻译
  5. Codeforces Gym - 100917 部分题解
  6. PerlTidy的配置项
  7. c#访问修饰符修饰无效_C中的数据类型和修饰符
  8. python网易云音乐爬虫歌词_利用Python网络爬虫抓取网易云音乐歌词
  9. R语言进行系统聚类分析并作图(数据来源国家统计局)
  10. 3D游戏编程与设计5——与游戏世界交互
  11. win7安装系统后关闭计算机,一键重装系统win7后电脑无声音怎么办
  12. 我希望逢着一个丁香一样地结着愁怨的姑娘
  13. 《HelloGitHub》第 60 期,你喜欢玩游戏吗?
  14. 2016,初入江湖,尚未见刀光剑影
  15. P3975 [TJOI2015]弦论 第K小子串
  16. 解决“A problem occurred starting process 'command ''D:\AndroidSdk\..\mips64el-linux-android-strip''的问题
  17. VB.NET获取dpi的方法
  18. 计算机资源管理器功能,Windows资源管理器的作用 -电脑资料
  19. 平面设计10大手法,设计师必看
  20. mat 释放_OpenCV中Mat总结

热门文章

  1. MySQL练习题目(一)
  2. 读计算机专业研究生,你不后悔么?
  3. 点击表头排序的几种方法 动态表格
  4. Python tkinter实现计算器
  5. 兔子繁殖问题,兔子有寿命限制
  6. linux中重置是啥意思,linux – netstat -s中“由于意外数据而重置连接”是什么意思...
  7. Windows7 简体中文旗舰版下载 (MSDN官方发布正式版原版镜像)(转至异次元)
  8. 使用Python计算化学式的相对分子质量
  9. 超七成受访德国企业计划进一步在华投资;美国邮政总局发行牛年纪念邮票 | 美通企业日报...
  10. 轻笔记显示无法连接到服务器,轻笔记:支持群组的跨平台笔记应用 (1)PC客户端...