网页表格抓取

网页表格抓取

Python自动化办公——批量打开网页,从网页上下载文件到本地

网站优化优采云 发表了文章 • 0 个评论 • 144 次浏览 • 2022-08-28 02:20 • 来自相关话题

  Python自动化办公——批量打开网页,从网页上下载文件到本地
  “经过前几节内容的学习,我们已经掌握了如何对文件进行处理,那么接下来我们将学习下一个模块的内容——即获取网页上的信息。目前我们许多的工作都离不开互联网,比如上网检索相关文献,查找数据等。如果我们学会让程序自己就能够上网,并检索网页上的信息,提取出我们想要的信息,岂不是为我们节省了很多时间!接下来几节我们将学习利用Python抓取网页的几个模块,这一节我们将主要学习如何利用程序批量打开网页,以及从网页上下载文件到本地。”
  利用webbrowser批量打开网页
  假如你的上级让你将表格里的城市的天气统计出来,我们首先可以在网页上搜索相关城市的天气信息,观察其不同城市的网址:
  我们可以发现通过更改网址内的城市名称可以查看相应城市的天气信息。首先我们可以将表格内的城市信息提取出来:
  import xlrddata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) print(city)
  输出:
  ['上海', '苏州', '成都', '重庆', '杭州', '南京', '无锡', '长沙']
  接下来我们可以根据更改网址中的城市名称来利用webbrowser打开网页:
  import xlrd,webbrowserdata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给data.sheets()参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) for c in city: webbrowser.open('https://weathernew.pae.baidu.com/weathernew/pc?query='+c+'天气&srcid=4982')
  这样就可以自动将这些城市的天气信息打开了!
  利用requests从网页上下载文件并保存到本地
  
  Requests模块是常用的访问网页的工具,我们使用其get方法能够得到网页信息,我们这里以下载txt为例,get当中的网址我们通常称为url,这里的url为下载链接:
  import requestsres = requests.get('https://www.gutenberg.org/cache/epub/1112/pg1112.txt')type(res)
  输出:
  requests.models.Response
  其返回类型为response格式
  #是否下载成功res.status_code == requests.codes.OK
  如果返回True则表明下载成功
  我们可以查看下载的内容长度:
  len(res.text)
  输出:
  179380
  还可以将其部分字符打印出来:
  print(res.text[:200])
  
  输出:
  The Project Gutenberg EBook of Romeo andJuliet, by William Shakespeare<br /><br /><br /><br />*******************************************************************THIS EBOOK WAS ONE OF PROJECT GUTENBERG'SEARLY FILES
  上面判断是否下载成功仅以True/False的形式返回,如果我们想让下载失败返回一个错误提醒则可以使用res.raise_for_status(),其只有在下载失败时会给予错误提示,并终止运行。
  将文件下载到本地通常我们使用分块保存的操作:
  #下载到本地,逐块保存#以写入的模式新建输出文件out = open('output.txt','wb')#分段保存,这里每段需要指定包含多少字节,我们通常传入10万字节forlineinres.iter_content(100000): out.write(line)out.close()
  输出文件:
  这里iter_content的参数我们通常选用10万,这样我们可以将我们的文本文件分为两块(100000,79380)循环保存下来。
  既然已经学会了如何从网页上下载文件,那么相信这仅仅是个开始~大家可以发散思维自己动手试试~
  以上即为本次全部内容,写文不易,如果您觉得我们的推送对您很有帮助,您可以通过赞赏来给予我们超大鼓励!跪谢~
  END
  参考资料
  [1]Python编程快速上手:让繁琐工作自动化/(美)斯维加特(Al Sweigart)著;王海鹏译. -- 北京:人民邮电出版社,2016.7[2]xlrd · PyPI 查看全部

  Python自动化办公——批量打开网页,从网页上下载文件到本地
  “经过前几节内容的学习,我们已经掌握了如何对文件进行处理,那么接下来我们将学习下一个模块的内容——即获取网页上的信息。目前我们许多的工作都离不开互联网,比如上网检索相关文献,查找数据等。如果我们学会让程序自己就能够上网,并检索网页上的信息,提取出我们想要的信息,岂不是为我们节省了很多时间!接下来几节我们将学习利用Python抓取网页的几个模块,这一节我们将主要学习如何利用程序批量打开网页,以及从网页上下载文件到本地。”
  利用webbrowser批量打开网页
  假如你的上级让你将表格里的城市的天气统计出来,我们首先可以在网页上搜索相关城市的天气信息,观察其不同城市的网址:
  我们可以发现通过更改网址内的城市名称可以查看相应城市的天气信息。首先我们可以将表格内的城市信息提取出来:
  import xlrddata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) print(city)
  输出:
  ['上海', '苏州', '成都', '重庆', '杭州', '南京', '无锡', '长沙']
  接下来我们可以根据更改网址中的城市名称来利用webbrowser打开网页:
  import xlrd,webbrowserdata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给data.sheets()参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) for c in city: webbrowser.open('https://weathernew.pae.baidu.com/weathernew/pc?query='+c+'天气&srcid=4982')
  这样就可以自动将这些城市的天气信息打开了!
  利用requests从网页上下载文件并保存到本地
  
  Requests模块是常用的访问网页的工具,我们使用其get方法能够得到网页信息,我们这里以下载txt为例,get当中的网址我们通常称为url,这里的url为下载链接:
  import requestsres = requests.get('https://www.gutenberg.org/cache/epub/1112/pg1112.txt')type(res)
  输出:
  requests.models.Response
  其返回类型为response格式
  #是否下载成功res.status_code == requests.codes.OK
  如果返回True则表明下载成功
  我们可以查看下载的内容长度:
  len(res.text)
  输出:
  179380
  还可以将其部分字符打印出来:
  print(res.text[:200])
  
  输出:
  The Project Gutenberg EBook of Romeo andJuliet, by William Shakespeare<br /><br /><br /><br />*******************************************************************THIS EBOOK WAS ONE OF PROJECT GUTENBERG'SEARLY FILES
  上面判断是否下载成功仅以True/False的形式返回,如果我们想让下载失败返回一个错误提醒则可以使用res.raise_for_status(),其只有在下载失败时会给予错误提示,并终止运行。
  将文件下载到本地通常我们使用分块保存的操作:
  #下载到本地,逐块保存#以写入的模式新建输出文件out = open('output.txt','wb')#分段保存,这里每段需要指定包含多少字节,我们通常传入10万字节forlineinres.iter_content(100000): out.write(line)out.close()
  输出文件:
  这里iter_content的参数我们通常选用10万,这样我们可以将我们的文本文件分为两块(100000,79380)循环保存下来。
  既然已经学会了如何从网页上下载文件,那么相信这仅仅是个开始~大家可以发散思维自己动手试试~
  以上即为本次全部内容,写文不易,如果您觉得我们的推送对您很有帮助,您可以通过赞赏来给予我们超大鼓励!跪谢~
  END
  参考资料
  [1]Python编程快速上手:让繁琐工作自动化/(美)斯维加特(Al Sweigart)著;王海鹏译. -- 北京:人民邮电出版社,2016.7[2]xlrd · PyPI

网页爬虫简单学习

网站优化优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-08-16 10:01 • 来自相关话题

  网页爬虫简单学习
  最近因工作需求,需要使用爬虫去采集数据,下面介绍一下我用到过的 Beautiful Soup 库和 XPath。
  Beautiful Soup
  Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。官方解释如下:
  Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。
  Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:
  Tag:
  通俗点讲就是 HTML 中的一个个标签。
  NavigableString:
  获取标签内部的文字。
  
  BeautifulSoup:
  BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性。
  Comment:
  Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。我们找一个带注释的标签。
  lxml
  BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法。lxml 用法源自 lxml python 官方文档,更多内容请直接参阅官方文档。
  XPath 语法
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
  <br /><br /> Harry Potter<br /> J K. Rowling<br /> 2005<br /> 29.99<br /><br />
  这里就大致简单介绍一下,关于这两个库的用法在网上一搜即可。
  
  BeautifulSoup 是一个库,而 XPath 是一种技术,python 中最常用的 XPath 库是 lxml,这两者应该怎么取舍,可以根据实际情况和以下对比来决定。
  BeautifulSoup 和 lxml 的原理不一样,BeautifulSoup 是基于 DOM 的,会载入整个文档,解析整个 DOM 树,因此时间和内存开销都会大很多。而 lxml 只会局部遍历,另外 lxml 是用 C 写的,而 BeautifulSoup 是用 python 写的,因此性能方面自然会差很多。
  BeautifulSoup 用起来比较简单,API 非常人性化,支持 css 选择器。lxml 的 XPath 写起来麻烦,开发效率不如 BeautifulSoup。例如:
  title = soup.select('.content div.title h3')
  同样的代码用 Xpath 写起来会很麻烦:
  title=tree.xpath("//*[@class='content']/div[@class='content']/h3")
  如果在提取某个页面的某个标签的 xpath 路径的话,可以如下图:
  个人觉得 BeautifulSoup 与 xpath 相比,优势就是无需考虑文档结构。只需要找元素对应的 CSS 就可以。xpath 比较恶心人的地方就在于你要确保元素路径的准确,所以有的时候调试起来还是有点儿麻烦的。
  如果你要采集的图片、商品说明、价格、划线价格、备注等等都有不同的 CSS 属性,那 BeautifulSoup 用起来最舒服。当然,也包括小说网站等等,总之,你要采集的数据根据 CSS 有典型的规律性的,可以首选 BeautifulSoup。但如果一个页面有三个表格,而且表格中的文字和属性都有重复的。显然无法使用 CSS 属性或条件表达式将其区分开。那就只能用 xpath 了。
  而 xpath 可能遇到的是,浏览器渲染网页时会自动补全源码中缺少的标签,你在浏览器开发者工具中看到的源码和请求的源码不一定是一样的,你用开发者工具中的功能复制的路径也不一定是对的。比如有些网页的表格会不写tbody 标签,直接 th、tr、td。浏览器在渲染时会自动把 tbody 补全到源码里,但是你请求的源码里是没有的。 查看全部

  网页爬虫简单学习
  最近因工作需求,需要使用爬虫去采集数据,下面介绍一下我用到过的 Beautiful Soup 库和 XPath。
  Beautiful Soup
  Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。官方解释如下:
  Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。
  Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:
  Tag:
  通俗点讲就是 HTML 中的一个个标签。
  NavigableString:
  获取标签内部的文字。
  
  BeautifulSoup:
  BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性。
  Comment:
  Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。我们找一个带注释的标签。
  lxml
  BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法。lxml 用法源自 lxml python 官方文档,更多内容请直接参阅官方文档。
  XPath 语法
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
  <br /><br /> Harry Potter<br /> J K. Rowling<br /> 2005<br /> 29.99<br /><br />
  这里就大致简单介绍一下,关于这两个库的用法在网上一搜即可。
  
  BeautifulSoup 是一个库,而 XPath 是一种技术,python 中最常用的 XPath 库是 lxml,这两者应该怎么取舍,可以根据实际情况和以下对比来决定。
  BeautifulSoup 和 lxml 的原理不一样,BeautifulSoup 是基于 DOM 的,会载入整个文档,解析整个 DOM 树,因此时间和内存开销都会大很多。而 lxml 只会局部遍历,另外 lxml 是用 C 写的,而 BeautifulSoup 是用 python 写的,因此性能方面自然会差很多。
  BeautifulSoup 用起来比较简单,API 非常人性化,支持 css 选择器。lxml 的 XPath 写起来麻烦,开发效率不如 BeautifulSoup。例如:
  title = soup.select('.content div.title h3')
  同样的代码用 Xpath 写起来会很麻烦:
  title=tree.xpath("//*[@class='content']/div[@class='content']/h3")
  如果在提取某个页面的某个标签的 xpath 路径的话,可以如下图:
  个人觉得 BeautifulSoup 与 xpath 相比,优势就是无需考虑文档结构。只需要找元素对应的 CSS 就可以。xpath 比较恶心人的地方就在于你要确保元素路径的准确,所以有的时候调试起来还是有点儿麻烦的。
  如果你要采集的图片、商品说明、价格、划线价格、备注等等都有不同的 CSS 属性,那 BeautifulSoup 用起来最舒服。当然,也包括小说网站等等,总之,你要采集的数据根据 CSS 有典型的规律性的,可以首选 BeautifulSoup。但如果一个页面有三个表格,而且表格中的文字和属性都有重复的。显然无法使用 CSS 属性或条件表达式将其区分开。那就只能用 xpath 了。
  而 xpath 可能遇到的是,浏览器渲染网页时会自动补全源码中缺少的标签,你在浏览器开发者工具中看到的源码和请求的源码不一定是一样的,你用开发者工具中的功能复制的路径也不一定是对的。比如有些网页的表格会不写tbody 标签,直接 th、tr、td。浏览器在渲染时会自动把 tbody 补全到源码里,但是你请求的源码里是没有的。

移动端网站,独立APP,网站排名策略!

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-07-27 01:25 • 来自相关话题

  移动端网站,独立APP,网站排名策略!
  今天有个小伙伴私信我,打算做一个时尚美妆类APP,百度SEO,目前对方是有一个移动站点。
  打算通过百度SEO,获取搜索流量,从而提升APP的下载量和用户增量。
  从搜索营销与百度SEO的角度,我们认为是可行的,但实操起来还是有诸多细节需要注意!
  如下图:
  这个是移动端产品内容页面,整体上来讲,还算是比较清新,没有过多的冗余性内容。
  那么,移动端网站,独立APP,网站排名策略有哪些?
  1、移动端SEO排名阻碍
  要让独立APP有效的获取移动端排名流量,首先应该做的是梳理独立APP做移动端SEO排名的阻碍有哪些:
  ① 页面标题个性化
  对于搜索引擎来说,要识别一个页面的内容,首先是抓取这个页面的标题标签,通过标题关键词来明确页面主题,再通过内容当中的各种因素来识别页面质量。
  而独立APP中大多内容并没有这么做,更多的是依靠信息流分发来满足用户标签化需求,但并不符合SEO策略。
  ② 内容缺少SEO属性
  同时页面中的内容也更倾向于新媒体样式,比如:不是按照SEO文章的段落区分,有的内容会按照句子来换行,有的会植入一些文字类图标代表文字意义。
  而搜索引擎是需要通过文字来识别内容的,就更不需要提关键词植入一类的SEO属性,这些问题对于独立APP单页面排名形成了天然性阻碍。
  ③ 页面信息流展现没有固定分类
  因独立APP的内容分发机制导致,APP中的内容没有固定的分类,一切都按照兴趣标签来划分内容分类。
  
  但对于做SEO来说,这些内容就需要重新进行分类,在移动端网站中可以更有效的满足用户需求,便利搜索引擎爬行与抓取。
  ④ 内容质量多元化
  一般独立APP内容都会有审核机制,但处于规模化处理的繁琐与必要性,会导致APP中的内容大部分只是规避了违禁词一类的审核,而关于内容质量多数是基于内容点赞、评论等数据来判断质量优劣。
  而对于搜索引擎来说,内容质量更多的是在于原创度、内容关键词布局、段落等一系列因素,所以,对于APP做移动端SEO来说,APP内容梳理是一个问题。
  如何区分与筛选优质内容,推送给搜索引擎显得格外重要。
  ⑤ 缺少合理内部链接
  做SEO对内链的依赖性很高,可以引导蜘蛛抓取其他页面,也可以提高当前页面的相关性等,而大部分APP内容并没有内链设置的必要,所以需要在移动网站中合理布局内链锚文本。
  ⑥ URL路径个性化
  对于APP来说,几乎可以忽略url一说,对于移动端网站来说,虽然搜索引擎也在削弱url样式对网站的影响,但一个简单明了,没有多余参数的url还是搜索引擎所喜爱的,我们需要对移动端网站的url进行重新规划,以符合搜索引擎的需求。
  2、移动端SEO,APP排名策略
  做好了独立APP做移动端网站SEO的阻碍研究后,我们就可以依照搜索引擎需要的标准,调整独立APP内容到移动端网站中,获取相关排名:
  ① 区分高质量原创内容
  从SEO的角度而言,我们在做APP数据推送(给搜索引擎)的时候,因为APP中的碎片化信息非常多。
  我们需要合理的筛选优质内容,建立高质量集合,在必要的情况下,可以让自身的运营,输出一部分高质量的内容。
  用于推送给搜索引擎,建立前期的搜索信任度。
  ② 规划设计话题标签
  我们知道APP中的内容是碎片化的,并且内容产出的样式,在某种程度上,我们没有办法进行标准化,大部分都是UGC内容,除非我们建立PGC体系,在这样的基础性,我们可以搭建SEO标准化的内容生产模型。
  这并不适用于海量数据的APP产出,因此,我们从SEO排名的角度,更多的是将排序策略,定位到话题标签中。
  
  精细化,每一个话题属性标签,也就是TAG标签。
  ③ 建立整站结构地图
  我们知道对于内容输出为主的APP来讲,我们想要试图让搜索引擎合理便利的爬行,除了要有良好的页面结构之外。
  在某种程度上,我们试图提高页面收录的时候,还需要建立网站地图,它可以快速的辅助搜索引擎爬行目标APP站点中的页面。
  这里面需要说明的是:
  需要注意的是内容多也不能做索引型网站地图,搜索引擎有明确规定,索引型网站地图不再进行识别,可以通过多个编号不同的xml形式网站地图进行提交。
  ④ 合理提交内容给百度
  我们知道最近搜索引擎对内容收录策略做了调整,很多网站收录效果并不好,所以我们做移动端网站内容提交需要有策略,比如按照一定分类进行提交,其中的页面相关性、内链链接有效性等都可以提高页面的初始排名权重。
  提交方式有多种,因为网站内容已经存在,所以批量提交是最好的方式,可以有效的以提交内容的数量来提升蜘蛛抓取频率,形成良性循环。
  而进行批量提交最好的方式是两种,一种是通过api提交,发布内容后提交,再一种是通过sitemap提交我们之前生成网站地图的一部分,也可以说是api提交的url汇总。
  ⑤ 建立反向链接
  谈论到做网站SEO,必然离不开反向链接,尤其是外链,不仅可以引导蜘蛛抓取页面内容同时还可以提高页面相关性,提升页面权重。
  我们建议批量有针对性的对排名页面做锚文本链接,锚文本链接以排名页面定位的关键词为准,具体的数量依据页面排名情况而定,可以做一个记录表格,通过表格来规划,外链资源的使用情况。
  其中,内链策略也是我们需要重点考量的一个行为指标。
  ⑥ 域名往往M端启用
  还有一个重要的问题,很多APP做搜索引擎推广,只是做移动端网站,所以域名往往会选择m. *** .com这种格式。
  虽然,目前没有PC端,我们非常清楚,搜索引擎对于一个网站抓取的策略,往往对www开头的站点具有天然敏感度。
  因此,在这方面我们建议,如果没有PC端也是可以使用www域名作为落地访问域名。
  总结:关于移动端网站,独立APP,网站排名策略有哪些的问题,仍然有诸多细节需要讨论,以上内容,仅供参考。 查看全部

  移动端网站,独立APP,网站排名策略!
  今天有个小伙伴私信我,打算做一个时尚美妆类APP,百度SEO,目前对方是有一个移动站点。
  打算通过百度SEO,获取搜索流量,从而提升APP的下载量和用户增量。
  从搜索营销与百度SEO的角度,我们认为是可行的,但实操起来还是有诸多细节需要注意!
  如下图:
  这个是移动端产品内容页面,整体上来讲,还算是比较清新,没有过多的冗余性内容。
  那么,移动端网站,独立APP,网站排名策略有哪些?
  1、移动端SEO排名阻碍
  要让独立APP有效的获取移动端排名流量,首先应该做的是梳理独立APP做移动端SEO排名的阻碍有哪些:
  ① 页面标题个性化
  对于搜索引擎来说,要识别一个页面的内容,首先是抓取这个页面的标题标签,通过标题关键词来明确页面主题,再通过内容当中的各种因素来识别页面质量。
  而独立APP中大多内容并没有这么做,更多的是依靠信息流分发来满足用户标签化需求,但并不符合SEO策略。
  ② 内容缺少SEO属性
  同时页面中的内容也更倾向于新媒体样式,比如:不是按照SEO文章的段落区分,有的内容会按照句子来换行,有的会植入一些文字类图标代表文字意义。
  而搜索引擎是需要通过文字来识别内容的,就更不需要提关键词植入一类的SEO属性,这些问题对于独立APP单页面排名形成了天然性阻碍。
  ③ 页面信息流展现没有固定分类
  因独立APP的内容分发机制导致,APP中的内容没有固定的分类,一切都按照兴趣标签来划分内容分类。
  
  但对于做SEO来说,这些内容就需要重新进行分类,在移动端网站中可以更有效的满足用户需求,便利搜索引擎爬行与抓取。
  ④ 内容质量多元化
  一般独立APP内容都会有审核机制,但处于规模化处理的繁琐与必要性,会导致APP中的内容大部分只是规避了违禁词一类的审核,而关于内容质量多数是基于内容点赞、评论等数据来判断质量优劣。
  而对于搜索引擎来说,内容质量更多的是在于原创度、内容关键词布局、段落等一系列因素,所以,对于APP做移动端SEO来说,APP内容梳理是一个问题。
  如何区分与筛选优质内容,推送给搜索引擎显得格外重要。
  ⑤ 缺少合理内部链接
  做SEO对内链的依赖性很高,可以引导蜘蛛抓取其他页面,也可以提高当前页面的相关性等,而大部分APP内容并没有内链设置的必要,所以需要在移动网站中合理布局内链锚文本。
  ⑥ URL路径个性化
  对于APP来说,几乎可以忽略url一说,对于移动端网站来说,虽然搜索引擎也在削弱url样式对网站的影响,但一个简单明了,没有多余参数的url还是搜索引擎所喜爱的,我们需要对移动端网站的url进行重新规划,以符合搜索引擎的需求。
  2、移动端SEO,APP排名策略
  做好了独立APP做移动端网站SEO的阻碍研究后,我们就可以依照搜索引擎需要的标准,调整独立APP内容到移动端网站中,获取相关排名:
  ① 区分高质量原创内容
  从SEO的角度而言,我们在做APP数据推送(给搜索引擎)的时候,因为APP中的碎片化信息非常多。
  我们需要合理的筛选优质内容,建立高质量集合,在必要的情况下,可以让自身的运营,输出一部分高质量的内容。
  用于推送给搜索引擎,建立前期的搜索信任度。
  ② 规划设计话题标签
  我们知道APP中的内容是碎片化的,并且内容产出的样式,在某种程度上,我们没有办法进行标准化,大部分都是UGC内容,除非我们建立PGC体系,在这样的基础性,我们可以搭建SEO标准化的内容生产模型。
  这并不适用于海量数据的APP产出,因此,我们从SEO排名的角度,更多的是将排序策略,定位到话题标签中。
  
  精细化,每一个话题属性标签,也就是TAG标签。
  ③ 建立整站结构地图
  我们知道对于内容输出为主的APP来讲,我们想要试图让搜索引擎合理便利的爬行,除了要有良好的页面结构之外。
  在某种程度上,我们试图提高页面收录的时候,还需要建立网站地图,它可以快速的辅助搜索引擎爬行目标APP站点中的页面。
  这里面需要说明的是:
  需要注意的是内容多也不能做索引型网站地图,搜索引擎有明确规定,索引型网站地图不再进行识别,可以通过多个编号不同的xml形式网站地图进行提交。
  ④ 合理提交内容给百度
  我们知道最近搜索引擎对内容收录策略做了调整,很多网站收录效果并不好,所以我们做移动端网站内容提交需要有策略,比如按照一定分类进行提交,其中的页面相关性、内链链接有效性等都可以提高页面的初始排名权重。
  提交方式有多种,因为网站内容已经存在,所以批量提交是最好的方式,可以有效的以提交内容的数量来提升蜘蛛抓取频率,形成良性循环。
  而进行批量提交最好的方式是两种,一种是通过api提交,发布内容后提交,再一种是通过sitemap提交我们之前生成网站地图的一部分,也可以说是api提交的url汇总。
  ⑤ 建立反向链接
  谈论到做网站SEO,必然离不开反向链接,尤其是外链,不仅可以引导蜘蛛抓取页面内容同时还可以提高页面相关性,提升页面权重。
  我们建议批量有针对性的对排名页面做锚文本链接,锚文本链接以排名页面定位的关键词为准,具体的数量依据页面排名情况而定,可以做一个记录表格,通过表格来规划,外链资源的使用情况。
  其中,内链策略也是我们需要重点考量的一个行为指标。
  ⑥ 域名往往M端启用
  还有一个重要的问题,很多APP做搜索引擎推广,只是做移动端网站,所以域名往往会选择m. *** .com这种格式。
  虽然,目前没有PC端,我们非常清楚,搜索引擎对于一个网站抓取的策略,往往对www开头的站点具有天然敏感度。
  因此,在这方面我们建议,如果没有PC端也是可以使用www域名作为落地访问域名。
  总结:关于移动端网站,独立APP,网站排名策略有哪些的问题,仍然有诸多细节需要讨论,以上内容,仅供参考。

网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭

网站优化优采云 发表了文章 • 0 个评论 • 121 次浏览 • 2022-07-23 23:48 • 来自相关话题

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  3.界面提示
  
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。
  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。
  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  四、示例代码的多种入口
  
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。
  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END 查看全部

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  3.界面提示
  
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。
  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。
  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  四、示例代码的多种入口
  
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。
  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END

网页表格抓取 学校企业网站建设费用(学校网站搭建)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-07-23 23:48 • 来自相关话题

  网页表格抓取 学校企业网站建设费用(学校网站搭建)
  学校企业网站建设费用(学校网站搭建)
  █百度排名联系排名大神【QQ/V:897569356】【╇飞机libing8899】专业网站搭建,网站搭建设计,系统程序开发,各种网站和小程序都可以做,H5平台制作-采票OA信用盘时间盘打赏台-APP制作,网站三端开发.专业搭建制作公司,一条龙搭建
  现在大家都爱拍短视频去分享,去吸引粉丝,抖音更是成为了短视频的新风口,而在新风口中能成为爆款的短视频就需要具备三个维度!
  
  第文章的标准是什么,这类文章又被称为seo文,它的要求可以说低到人们不敢相信,但是每天的需求量很大,有一定的写作规则,一个小网站每天就需要两篇以上的文章,要求没有错别字,完整,通顺,流畅,这是较高标准,几乎任何有文字能力的人都可以轻易达到。关键词优化需要一定的写作技巧,却没有什么艺术性的需求,文章撰写完成之后要通过一定的技术手段检测。
  抖音平台每天的人流量非常大,基本上只要你这个视频做的好几百上千的播放量是完全没有问题的,因此导致很多人来到抖音上引流导致竞争压力大,如果你没有很好的作品吸引眼球用不了多长时间人气就会迅速减少,也会造成作品流量少,甚至会出现没有流量的情况出现。
  在拍摄前期要准备好食材,确保食材品相质量过关,在镜头下要保证颜色鲜艳,新鲜干净卫生。另外考虑到拍摄过程与时间的矛盾,食材要多备一些,尤其是冰激凌之类的食物,拿出来没多久就会变形变色的食材,尽量多备,以备不时之需。
  跟踪网页链接是搜索引擎蜘蛛发现新网址的最基本方法。搜网站seo顾问索引擎蜘蛛抓取的页面文件与用户浏览器得到的完全一样,抓取的文件存入数据库。建立索引搜索引擎索引程序把蜘蛛抓取的网页文件分湘潭网站优化解、分析,并以巨大表格的形式存入数据库,这个过程就是索引。
  
  每个企业在行业中的地位,目标受众,行业情况的不同,所需要采用的SEO优化的方式和步骤哦也就因人而异,这是因素的不同在很大程度上影响着SEO的策略。
  最后,在文案调色盘方面, 橙色的文案主要是针对产品的功能/特点进行说明,而紫色则是诱惑式效果呈现,这两种颜色建议大家可以按需要使用,其中颜色比例没有固定的,非常鼓励大家自主创新,能产出更多好的创意。
  开头三要素,一篇文章下来提高百度关键词排名第莱州网络公司一要出现的就是title、keywords和deion这三个内容,这个相信大部分的站长都会了。现在有很多站长把关键词和描述标签删除,这个也是可以,但是如果你去做了填写了,那将会更好,在描述标签里出现一到两次关键词,对排名是非常有帮助的。 查看全部

  网页表格抓取 学校企业网站建设费用(学校网站搭建)
  学校企业网站建设费用(学校网站搭建)
  █百度排名联系排名大神【QQ/V:897569356】【╇飞机libing8899】专业网站搭建,网站搭建设计,系统程序开发,各种网站和小程序都可以做,H5平台制作-采票OA信用盘时间盘打赏台-APP制作,网站三端开发.专业搭建制作公司,一条龙搭建
  现在大家都爱拍短视频去分享,去吸引粉丝,抖音更是成为了短视频的新风口,而在新风口中能成为爆款的短视频就需要具备三个维度!
  
  第文章的标准是什么,这类文章又被称为seo文,它的要求可以说低到人们不敢相信,但是每天的需求量很大,有一定的写作规则,一个小网站每天就需要两篇以上的文章,要求没有错别字,完整,通顺,流畅,这是较高标准,几乎任何有文字能力的人都可以轻易达到。关键词优化需要一定的写作技巧,却没有什么艺术性的需求,文章撰写完成之后要通过一定的技术手段检测。
  抖音平台每天的人流量非常大,基本上只要你这个视频做的好几百上千的播放量是完全没有问题的,因此导致很多人来到抖音上引流导致竞争压力大,如果你没有很好的作品吸引眼球用不了多长时间人气就会迅速减少,也会造成作品流量少,甚至会出现没有流量的情况出现。
  在拍摄前期要准备好食材,确保食材品相质量过关,在镜头下要保证颜色鲜艳,新鲜干净卫生。另外考虑到拍摄过程与时间的矛盾,食材要多备一些,尤其是冰激凌之类的食物,拿出来没多久就会变形变色的食材,尽量多备,以备不时之需。
  跟踪网页链接是搜索引擎蜘蛛发现新网址的最基本方法。搜网站seo顾问索引擎蜘蛛抓取的页面文件与用户浏览器得到的完全一样,抓取的文件存入数据库。建立索引搜索引擎索引程序把蜘蛛抓取的网页文件分湘潭网站优化解、分析,并以巨大表格的形式存入数据库,这个过程就是索引。
  
  每个企业在行业中的地位,目标受众,行业情况的不同,所需要采用的SEO优化的方式和步骤哦也就因人而异,这是因素的不同在很大程度上影响着SEO的策略。
  最后,在文案调色盘方面, 橙色的文案主要是针对产品的功能/特点进行说明,而紫色则是诱惑式效果呈现,这两种颜色建议大家可以按需要使用,其中颜色比例没有固定的,非常鼓励大家自主创新,能产出更多好的创意。
  开头三要素,一篇文章下来提高百度关键词排名第莱州网络公司一要出现的就是title、keywords和deion这三个内容,这个相信大部分的站长都会了。现在有很多站长把关键词和描述标签删除,这个也是可以,但是如果你去做了填写了,那将会更好,在描述标签里出现一到两次关键词,对排名是非常有帮助的。

Pandas可以直接读取网页html(表格)、json、csv等格式

网站优化优采云 发表了文章 • 0 个评论 • 151 次浏览 • 2022-07-22 06:48 • 来自相关话题

  Pandas可以直接读取网页html(表格)、json、csv等格式
  点击上方“Python爬虫与数据挖掘”,进行关注
  回复“书籍”即可获赠Python从入门到进阶共10本电子书
  今
  日
  鸡
  汤
  五更疏欲断,一树碧无情。
  大家好,我是Python进阶者。
  一、前言
  前几天在Python白银交流群【Ming】问了一道Pandas处理html的问题,如下图所示。
  
  其实也不是问,算交流。
  确实,Pandas可以直接读取html,而且在网页读取的时候更加方便。
  二、实现过程
  这里大家一起讨论,学习了Pandas直接读取html的方法。
  后来【null】给了一个示例代码,及时雨。
  简单的三句代码就扒下来网页数据了,并且存表格,针对表格形式的网页,再也不用挨个tr、td标签去取了,直接Pandas梭哈。
  
  后来发现哥几个竟然是湖北公安老乡,彼此聊得火热。老乡见老乡,一起学习更香!后来【null】多做了拓展,爬ajax加载的json格式,也可以用Pandas来实现,这里也给出了示例。
  得到的结果如下图所示:
  后来【月神】也给出了拓展,抓取csv格式也是可以的。
  不得不承认,Pandas实在是太强大了!
  三、总结
  大家好,我是皮皮。这篇文章主要盘点了一道Pandas处理网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
  最后感谢粉丝【Ming】提问,感谢【null】、【月神】给出的思路和代码解析,感谢【空翼】、【dcpeng】、【此类生物】、【unswervingly】、【瑜亮老师】、【×_×】、【猫药师Kelly】、【冫马讠成】等人参与学习交流。
  小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
  -------------------End------------------- 查看全部

  Pandas可以直接读取网页html(表格)、json、csv等格式
  点击上方“Python爬虫与数据挖掘”,进行关注
  回复“书籍”即可获赠Python从入门到进阶共10本电子书
  今
  日
  鸡
  汤
  五更疏欲断,一树碧无情。
  大家好,我是Python进阶者。
  一、前言
  前几天在Python白银交流群【Ming】问了一道Pandas处理html的问题,如下图所示。
  
  其实也不是问,算交流。
  确实,Pandas可以直接读取html,而且在网页读取的时候更加方便。
  二、实现过程
  这里大家一起讨论,学习了Pandas直接读取html的方法。
  后来【null】给了一个示例代码,及时雨。
  简单的三句代码就扒下来网页数据了,并且存表格,针对表格形式的网页,再也不用挨个tr、td标签去取了,直接Pandas梭哈。
  
  后来发现哥几个竟然是湖北公安老乡,彼此聊得火热。老乡见老乡,一起学习更香!后来【null】多做了拓展,爬ajax加载的json格式,也可以用Pandas来实现,这里也给出了示例。
  得到的结果如下图所示:
  后来【月神】也给出了拓展,抓取csv格式也是可以的。
  不得不承认,Pandas实在是太强大了!
  三、总结
  大家好,我是皮皮。这篇文章主要盘点了一道Pandas处理网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
  最后感谢粉丝【Ming】提问,感谢【null】、【月神】给出的思路和代码解析,感谢【空翼】、【dcpeng】、【此类生物】、【unswervingly】、【瑜亮老师】、【×_×】、【猫药师Kelly】、【冫马讠成】等人参与学习交流。
  小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
  -------------------End-------------------

阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!

网站优化优采云 发表了文章 • 0 个评论 • 136 次浏览 • 2022-07-22 02:33 • 来自相关话题

  阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!
  最近不少小伙伴问我们,人民日报、央视新闻的这类图表应该怎么做?
  ▲「南丁格尔玫瑰图」
  如果能在 Excel 或者 PPT 中,也用这类图表进行汇报,数据呈现是不是比较直观呢?
  然而新闻中的图片往往是 PS 等专业设计工具做出来的,且不说没有这个技术,日常工作中投入图表美化的时间也没那么多呀……
  我们专门薅来了 7 个在线制作图表的网站,还有 6 个图表灵感网站,今天就一口气分享给大家!
  有了这些网站,不需要多高深的技术,也不用花太长时间,分分钟让小白都能做出超好看的图表~
  文末有网站合集链接获取方式,记得看到最后哦!
  炫酷大屏轻松搞定
  ▋DataV收费情况:免费试用期 3 天推荐指数:★★★☆☆
  DataV 是阿里云出品的在线可视化工具,可以将超多数据,放在一块大屏上!
  还记得每年双十一、双十二的直播大屏吗?
  「什么?这样的效果,用一个小网站就能做出来?」
  首先进入阿里云网站,注册登录,找到 DataV。
  然后就能看到一堆早早准备好的图表模板,数量太多,选都选不过来!
  当然我们也可以新建空白模板,自由创作~
  这里我们随便选一个【金融投资产品转化购买看板】的模板,打开是科技感十足的编辑页面,可以看到 DataV 的编辑功能非常丰富!
  重点是,功能区、操作都用中文标得清清楚楚,对小白来说,比 Excel 里各种函数公式要友好多啦!
  当我们在左侧选中某一具体板块后,可以调出右侧的设置区域,详细调整各种参数,包括颜色、位置、数据来源等。
  等等……刚刚还夸你对小白友好,怎么出现了代码??
  
  不要慌!在 Data V 中,修改数据的方式主要有两种:
  直接动手修改代码;或者上传 CSV 等格式的文件,自动识别数据。
  需要注意的是,原始表格中的表头仍需改成相应的名称,如上图中的「x、y、s、z」等,而且不同图表的匹配字段可能会不一样,需要一一对应。
  更多使用方法,大家可以查看官方教程哦:❶ DataV 设计实操培训:❷ DataV 数据加工培训:
  话说回来,阿里出品当然好,但有没有操作更简单的呢?
  ▋网易有数收费情况:免费试用期 15 天推荐指数:★★★☆☆
  网易有数的特点是,编辑页面自由度非常高,页面操作也容易理解。
  新手教程只有三步:❶ 插入图表;❷ 分别将数据拖入 X 轴、Y 轴;❸ 尝试使用智能图表。
  在网易有数,你可以把所有元素分图层来编辑,就像 PS、PPT 的选择窗格一样,因此可以轻松完成炫酷的大屏!
  官方教程指路:
  ▋百度 Sugar收费情况:试用期 31 天推荐指数:★★★☆☆
  除了阿里和网易,百度也有自己的数据可视化网站!
  百度 Sugar,目的是解决报表和大屏的数据可视化问题,解放数据可视化系统的开发人力。
  因此生成报表后,可以直接发送到录入好的邮箱列表中~
  在百度 Sugar,除了可以直接套用各类行业的大屏模板之外,还可以套用移动端的模板。
  如果不使用模板,也可以进入自由编辑页面,自由插入你想要的图标类型,根据自己的需求制作大屏,或者单个图表。
  官方教程指路:▋镝(di)数收费情况:可免费使用推荐指数:★★★★★
  大多数工具需要自己准备数据,而镝数直接提供了找数据的工具!在镝数的「找数据」页面,可以找到各种来源的数据,也可以导入 Excel 格式。
  如果想要收集问卷调查数据,常用的问卷调查工具有金数据、问卷星等, 金数据会将结果自动生成柱状图或条形图。
  解决数据源问题后,镝数同样也提供了许多模板,但镝数为模板做了更细致的分类!文章开头提到的「南丁格尔玫瑰图」在这里也可以找到~
  
  除了常规的图表编辑以外,还可以选择一个含有数据图表的长图模板。做图和做图表同时进行,又可以提早下班了~
  不过日常工作中,往往用不到这些大屏、复杂的图表,一些简单的单个图表,就能满足我们的需求啦~
  单个图表也能花样百出
  ▋板板简报收费情况:可免费使用推荐指数:★★★★★腾讯出品的板板简报,更有利于社交传播。板板简报的主要优势在于,不管是数据简报,还是数据大屏,都是动态的,可以通过链接或二维码分享出去。而且,目前所有模板都是免费的!i 了 i 了~
  在板板简报的编辑页面,各种图表、组件和模板都可以自由添加,也能一键设置尺寸和水印,特别方便!
  下面这个图表,就是我套用板板简报的模板做出来的~
  ▲ 上下滑动查看
  整体来说,板板简报操作方便,做出来的长图图表颜值也很高!▋花火 hanabi收费情况:可免费使用推荐指数:★★★☆☆
  花火更适合制作单个静态/动态图表,目前模板数是 50+,还在持续更新中!和板板简报一样,花火免费提供所有图表,还可以在设置里选择去除水印哦~
  选好模板,进入编辑页面,上方有三种常见的 PPT 比例可供选择,如果是动态图表,还可以选择播放按钮观察动态效果~
  手绘风图表成品示例:
  操作上,直接双击就能进入编辑状态,也可上传 xlsx、csv、xls 等格式的文件自动导入。
  花火的制作公司除了有花火可视化工具外,还有 EVA 公司财务可视分析工具,感兴趣的同学可以自行了解更多信息~
  ▋图表秀收费情况:部分图表可免费使用推荐指数:★★★☆☆
  另一个适合制作单个图表的网站是图表秀。图表秀的图表类型总共近一百种,但是约一半图表需要成为会员后才能使用。如果不想开通会员,也可单个图表购买~玫瑰图用图表秀也可以做出来哦!
  图表秀的编辑页面很友好,不管是编辑数据还是修改属性,一眼就能看明白,编辑完成后可导出 PNG 或 GIF。
  PS:导出透明背景 PNG 及 GIF 需要付费~
  ▲编辑数据及修改属性 查看全部

  阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!
  最近不少小伙伴问我们,人民日报、央视新闻的这类图表应该怎么做?
  ▲「南丁格尔玫瑰图」
  如果能在 Excel 或者 PPT 中,也用这类图表进行汇报,数据呈现是不是比较直观呢?
  然而新闻中的图片往往是 PS 等专业设计工具做出来的,且不说没有这个技术,日常工作中投入图表美化的时间也没那么多呀……
  我们专门薅来了 7 个在线制作图表的网站,还有 6 个图表灵感网站,今天就一口气分享给大家!
  有了这些网站,不需要多高深的技术,也不用花太长时间,分分钟让小白都能做出超好看的图表~
  文末有网站合集链接获取方式,记得看到最后哦!
  炫酷大屏轻松搞定
  ▋DataV收费情况:免费试用期 3 天推荐指数:★★★☆☆
  DataV 是阿里云出品的在线可视化工具,可以将超多数据,放在一块大屏上!
  还记得每年双十一、双十二的直播大屏吗?
  「什么?这样的效果,用一个小网站就能做出来?」
  首先进入阿里云网站,注册登录,找到 DataV。
  然后就能看到一堆早早准备好的图表模板,数量太多,选都选不过来!
  当然我们也可以新建空白模板,自由创作~
  这里我们随便选一个【金融投资产品转化购买看板】的模板,打开是科技感十足的编辑页面,可以看到 DataV 的编辑功能非常丰富!
  重点是,功能区、操作都用中文标得清清楚楚,对小白来说,比 Excel 里各种函数公式要友好多啦!
  当我们在左侧选中某一具体板块后,可以调出右侧的设置区域,详细调整各种参数,包括颜色、位置、数据来源等。
  等等……刚刚还夸你对小白友好,怎么出现了代码??
  
  不要慌!在 Data V 中,修改数据的方式主要有两种:
  直接动手修改代码;或者上传 CSV 等格式的文件,自动识别数据。
  需要注意的是,原始表格中的表头仍需改成相应的名称,如上图中的「x、y、s、z」等,而且不同图表的匹配字段可能会不一样,需要一一对应。
  更多使用方法,大家可以查看官方教程哦:❶ DataV 设计实操培训:❷ DataV 数据加工培训:
  话说回来,阿里出品当然好,但有没有操作更简单的呢?
  ▋网易有数收费情况:免费试用期 15 天推荐指数:★★★☆☆
  网易有数的特点是,编辑页面自由度非常高,页面操作也容易理解。
  新手教程只有三步:❶ 插入图表;❷ 分别将数据拖入 X 轴、Y 轴;❸ 尝试使用智能图表。
  在网易有数,你可以把所有元素分图层来编辑,就像 PS、PPT 的选择窗格一样,因此可以轻松完成炫酷的大屏!
  官方教程指路:
  ▋百度 Sugar收费情况:试用期 31 天推荐指数:★★★☆☆
  除了阿里和网易,百度也有自己的数据可视化网站!
  百度 Sugar,目的是解决报表和大屏的数据可视化问题,解放数据可视化系统的开发人力。
  因此生成报表后,可以直接发送到录入好的邮箱列表中~
  在百度 Sugar,除了可以直接套用各类行业的大屏模板之外,还可以套用移动端的模板。
  如果不使用模板,也可以进入自由编辑页面,自由插入你想要的图标类型,根据自己的需求制作大屏,或者单个图表。
  官方教程指路:▋镝(di)数收费情况:可免费使用推荐指数:★★★★★
  大多数工具需要自己准备数据,而镝数直接提供了找数据的工具!在镝数的「找数据」页面,可以找到各种来源的数据,也可以导入 Excel 格式。
  如果想要收集问卷调查数据,常用的问卷调查工具有金数据、问卷星等, 金数据会将结果自动生成柱状图或条形图。
  解决数据源问题后,镝数同样也提供了许多模板,但镝数为模板做了更细致的分类!文章开头提到的「南丁格尔玫瑰图」在这里也可以找到~
  
  除了常规的图表编辑以外,还可以选择一个含有数据图表的长图模板。做图和做图表同时进行,又可以提早下班了~
  不过日常工作中,往往用不到这些大屏、复杂的图表,一些简单的单个图表,就能满足我们的需求啦~
  单个图表也能花样百出
  ▋板板简报收费情况:可免费使用推荐指数:★★★★★腾讯出品的板板简报,更有利于社交传播。板板简报的主要优势在于,不管是数据简报,还是数据大屏,都是动态的,可以通过链接或二维码分享出去。而且,目前所有模板都是免费的!i 了 i 了~
  在板板简报的编辑页面,各种图表、组件和模板都可以自由添加,也能一键设置尺寸和水印,特别方便!
  下面这个图表,就是我套用板板简报的模板做出来的~
  ▲ 上下滑动查看
  整体来说,板板简报操作方便,做出来的长图图表颜值也很高!▋花火 hanabi收费情况:可免费使用推荐指数:★★★☆☆
  花火更适合制作单个静态/动态图表,目前模板数是 50+,还在持续更新中!和板板简报一样,花火免费提供所有图表,还可以在设置里选择去除水印哦~
  选好模板,进入编辑页面,上方有三种常见的 PPT 比例可供选择,如果是动态图表,还可以选择播放按钮观察动态效果~
  手绘风图表成品示例:
  操作上,直接双击就能进入编辑状态,也可上传 xlsx、csv、xls 等格式的文件自动导入。
  花火的制作公司除了有花火可视化工具外,还有 EVA 公司财务可视分析工具,感兴趣的同学可以自行了解更多信息~
  ▋图表秀收费情况:部分图表可免费使用推荐指数:★★★☆☆
  另一个适合制作单个图表的网站是图表秀。图表秀的图表类型总共近一百种,但是约一半图表需要成为会员后才能使用。如果不想开通会员,也可单个图表购买~玫瑰图用图表秀也可以做出来哦!
  图表秀的编辑页面很友好,不管是编辑数据还是修改属性,一眼就能看明白,编辑完成后可导出 PNG 或 GIF。
  PS:导出透明背景 PNG 及 GIF 需要付费~
  ▲编辑数据及修改属性

简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-07-17 03:56 • 来自相关话题

  简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据
  今天我们讲讲如何抓取网页表格里的数据。首先我们分析一下,网页里的经典表格是怎么构成的。
  经典表格就这些知识点,没了。下面我们写个简单的表格 Web Scraper 爬虫。
  1.制作 Sitemap
  我们今天的练手网站是
  %C9%CF%BA%A3&txtDaoDa=%B1%B1%BE%A9
  爬虫的内容是抓取上海到北京的所有列车时刻表。
  我们先创建一个包含整个表格的 container,Type 类型选为 Table,表示我们要抓取表格。
  具体的参数如上图所示,因为比较简单,就不多说了。
  在这个面板下向下翻,会发现多了一个不一样的面板。观察一下你就会发现,这些数据其实就是表格数据类型的分类,在这个案例里,他把车次、出发站、开车时间等分类都列了出来。
  在 Table columns 这个分类里,每一行的内容旁边的选择按钮默认都是打勾的,也就是说默认都会抓取这些列的内容。如果你不想抓取某类内容,去掉对应的勾选就可以了。
  在你点击 Save selector 的按钮时,会发现 Result key 的一些选项报错,说什么 invalid format 格式无效:
  解决这个报错很简单,一般来说是 Result key 名字的长度不够,你给加个空格加个标点符号就行。如果还报错,就试试换成英文名字:
  解决报错保存成功后,我们就可以按照 Web Scraper 的爬取套路抓取数据了。
  2.为什么我不建议你用 Web Scraper 的 Table Selector?
  如果你按照刚刚的教程做下里,就会感觉很顺利,但是查看数据时就会傻眼了。
  刚开始抓取时,我们先用 Data preview 预览一下数据,会发现数据很完美:
  抓取数据后,在浏览器的预览面板预览,会发现车次这一列数据为 null,意味着没有抓取到相关内容:
  我们下载抓取的 CSV 文件后,在预览器里打开,会发现车次的数据出现了,但出发站的数据又为 null 了!
  这不是坑爹呢!
  关于这个问题我调查了半天,应该是 Web Scraper 对中文关键字索引的支持不太友好,所以会抛出一些诡异的 bug,因此我并不建议大家用它的 Table 功能。
  
  如果真的想抓取表格数据,我们可以用之前的方案,先创建一个类型为 Element 的 container,然后在 container 里再手动创建子选择器,这样就可以规避这个问题。
  上面只是一个原因,还有一个原因是,在现代网站,很少有人用 HTML 原始表格了。
  HTML 提供了表格的基础标签,比如说 、 、 等标签,这些标签上提供了默认的样式。好处是在互联网刚刚发展起来时,可以提供开箱即用的表格;缺点是样式太单一,不太好定制,后来很多网站用其它标签模拟表格,就像 PPT里用各种大小方块组合出一个表格一样,方便定制:
  出于这个原因,当你在用 Table Selector 匹配一个表格时,可能会死活匹配不上,因为从 Web Scraper 的角度考虑,你看到的那个表格就是个高仿,根本不是原装正品,自然是不认的。
  3.总结
  我们并不建议直接使用 Web Scraper 的 Table Selector,因为对中文支持不太友好,也不太好匹配现代网页。如果有抓取表格的需求,可以用之前的创建父子选择器的方法来做。
  前面几篇文章我们介绍了 Web Scraper 应对各种翻页的解决方法,比如说、和。今天我们说说一种更常见的翻页类型——分页器。
  本来想解释一下啥叫分页器,翻了一堆定义觉得很繁琐,大家也不是第一年上网了,看张图就知道了。我找了个功能最全的例子,支持数字页码调整,上一页下一页和指定页数跳转。
  今天我们就学学,Web Scraper 怎么对付这种类型的网页翻页。
  其实我们在本教程的第一个例子,中,豆瓣的这个电影榜单就是用分页器分割数据的:
  但当时我们是找网页链接规律抓取的,没有利用分页器去抓取。因为当一个网页的链接变化规律时,控制链接参数抓取是实现成本最低的;如果这个网页可以翻页,但是链接的变化不是规律的,就得去会一会这个分页器了。
  说这些理论有些枯燥,我们举个翻页链接不规律的例子。
  8 月 2 日是蔡徐坤的生日,为了表达庆祝,在微博上粉丝们给坤坤刷了 300W 的转发量,微博的转发数据正好是用分页器分割的,我们就分析一下微博的转发信息页面,看看这类数据怎么用 Web Scraper 抓取。
  这条微博的直达链接是:
  看了他那么多的视频,为了表达感激,我们可以点进去为坤坤加一份阅读量。
  首先我们看看第 1 页转发的链接,长这个样子:
  第 2 页长这个样子,注意到多了个 #_rnd36 参数:
  #_rnd36
  第 3 页参数为 #_rnd39
  #_rnd39
  第 4 页参数为 #_rnd76:
  #_rnd76
  多看几个链接你就可以发现,这个转发网页的网址毫无规律可言,所以只能通过分页器去翻页加载数据。下面就开始我们的实战教学环节。
  1.创建 SiteMap
  我们首先创建一个 SiteMap,这次取名为 cxk,起始链接为
  
  2.创建容器的 selector
  因为我们要点击分页器,外面的容器的类型我们选为 Element Click,具体的参数解释可以看下图,我们之前在详细解释过一次,这里就不多言了。
  container 的预览是下图的样子:
  分页器选择的过程可以参看下图:
  3.创建子选择器
  这几个子选择器都比较简单,类型都是文字选择器,我们选择了评论用户名,评论内容和评论时间三种类型的内容。
  4.抓取数据
  按照 Sitemap cxk -> Scrape 的操作路径就可以抓取数据了。
  5.一些问题
  如果你看了我上面的教程立马去爬数据,可能遇到的第一个问题就是,300w 的数据,难道我全部爬下来吗?
  听上去也不太现实,毕竟 Web Scraper 针对的数据量都是相对比较小的,几万数据都算多的了,数据再大你就得考虑爬取时间是否太长,数据如何存储,如何应对网址的反爬虫系统(比如说冷不丁的跳出一个验证码,这个 Web Scraper 是无能为力的)。
  考虑到这个问题,前面的的教程你又看过的话,可能想着用 :nth-of-type(-n+N) 控制抓取 N 条数据。如果你尝试了,就会发现这个方法根本没用。
  失效的原因其实涉及到一点点网页的知识了,感兴趣的话可以看看下面的解释,不感兴趣可以直接看最后的结论。
  像我前面介绍的和,他们新加载的数据,是在当前页面追加的,你一直下拉,数据一直加载,同时网页的滚动条会越来越短,这意味着所有的数据都在同一个页面。
  当我们用 :nth-of-type(-n+N) 控制加载数量时,其实相当于在这个网页设立一个计数器,当数据一直累加到我们想要的数量时,就会停止抓取。
  但是对于使用翻页器的网页,每次的翻页相当于刷新当前网页,这样每次都会设立一个计数器。
  比如说你想抓取 1000 条数据,但是第 1 页网页只有 20 条数据,抓到最后一条了,还差 980 条;然后一翻页,又设立一个新的计数器,抓完第 2 页的最后一条数据,还差 980,一翻页计数器就重置,又变成 1000 了......所以这个控制数量的方法就失效了。
  所以结论就是,如果翻页器类型的网页想提前结束抓取,只有断网的这种方法。当然,如果你有更好的方案,可以在评论里回复我,我们可以互相讨论一下。
  6.总结
  分页器是一种很常见的网页分页方法,我们可以通过 Web Scraper 中的 Element click 处理这种类型的网页,并通过断网的方法结束抓取。
  <p style="margin-top: 10px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;letter-spacing: 1.5px;line-height: normal;">● 简易数据分析(六):Web Scraper 翻页——抓取「滚动加载」类型网页
  ● 简易数据分析(二):Web Scraper 初尝鲜,抓取豆瓣高分电影
  ● 简易数据分析 (一):源起、了解 Web Scraper 与浏览器技巧
  <br /></p>
  ·END·
  图雀社区
  汇聚精彩的免费实战教程 查看全部

  简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据
  今天我们讲讲如何抓取网页表格里的数据。首先我们分析一下,网页里的经典表格是怎么构成的。
  经典表格就这些知识点,没了。下面我们写个简单的表格 Web Scraper 爬虫。
  1.制作 Sitemap
  我们今天的练手网站是
  %C9%CF%BA%A3&txtDaoDa=%B1%B1%BE%A9
  爬虫的内容是抓取上海到北京的所有列车时刻表。
  我们先创建一个包含整个表格的 container,Type 类型选为 Table,表示我们要抓取表格。
  具体的参数如上图所示,因为比较简单,就不多说了。
  在这个面板下向下翻,会发现多了一个不一样的面板。观察一下你就会发现,这些数据其实就是表格数据类型的分类,在这个案例里,他把车次、出发站、开车时间等分类都列了出来。
  在 Table columns 这个分类里,每一行的内容旁边的选择按钮默认都是打勾的,也就是说默认都会抓取这些列的内容。如果你不想抓取某类内容,去掉对应的勾选就可以了。
  在你点击 Save selector 的按钮时,会发现 Result key 的一些选项报错,说什么 invalid format 格式无效:
  解决这个报错很简单,一般来说是 Result key 名字的长度不够,你给加个空格加个标点符号就行。如果还报错,就试试换成英文名字:
  解决报错保存成功后,我们就可以按照 Web Scraper 的爬取套路抓取数据了。
  2.为什么我不建议你用 Web Scraper 的 Table Selector?
  如果你按照刚刚的教程做下里,就会感觉很顺利,但是查看数据时就会傻眼了。
  刚开始抓取时,我们先用 Data preview 预览一下数据,会发现数据很完美:
  抓取数据后,在浏览器的预览面板预览,会发现车次这一列数据为 null,意味着没有抓取到相关内容:
  我们下载抓取的 CSV 文件后,在预览器里打开,会发现车次的数据出现了,但出发站的数据又为 null 了!
  这不是坑爹呢!
  关于这个问题我调查了半天,应该是 Web Scraper 对中文关键字索引的支持不太友好,所以会抛出一些诡异的 bug,因此我并不建议大家用它的 Table 功能。
  
  如果真的想抓取表格数据,我们可以用之前的方案,先创建一个类型为 Element 的 container,然后在 container 里再手动创建子选择器,这样就可以规避这个问题。
  上面只是一个原因,还有一个原因是,在现代网站,很少有人用 HTML 原始表格了。
  HTML 提供了表格的基础标签,比如说 、 、 等标签,这些标签上提供了默认的样式。好处是在互联网刚刚发展起来时,可以提供开箱即用的表格;缺点是样式太单一,不太好定制,后来很多网站用其它标签模拟表格,就像 PPT里用各种大小方块组合出一个表格一样,方便定制:
  出于这个原因,当你在用 Table Selector 匹配一个表格时,可能会死活匹配不上,因为从 Web Scraper 的角度考虑,你看到的那个表格就是个高仿,根本不是原装正品,自然是不认的。
  3.总结
  我们并不建议直接使用 Web Scraper 的 Table Selector,因为对中文支持不太友好,也不太好匹配现代网页。如果有抓取表格的需求,可以用之前的创建父子选择器的方法来做。
  前面几篇文章我们介绍了 Web Scraper 应对各种翻页的解决方法,比如说、和。今天我们说说一种更常见的翻页类型——分页器。
  本来想解释一下啥叫分页器,翻了一堆定义觉得很繁琐,大家也不是第一年上网了,看张图就知道了。我找了个功能最全的例子,支持数字页码调整,上一页下一页和指定页数跳转。
  今天我们就学学,Web Scraper 怎么对付这种类型的网页翻页。
  其实我们在本教程的第一个例子,中,豆瓣的这个电影榜单就是用分页器分割数据的:
  但当时我们是找网页链接规律抓取的,没有利用分页器去抓取。因为当一个网页的链接变化规律时,控制链接参数抓取是实现成本最低的;如果这个网页可以翻页,但是链接的变化不是规律的,就得去会一会这个分页器了。
  说这些理论有些枯燥,我们举个翻页链接不规律的例子。
  8 月 2 日是蔡徐坤的生日,为了表达庆祝,在微博上粉丝们给坤坤刷了 300W 的转发量,微博的转发数据正好是用分页器分割的,我们就分析一下微博的转发信息页面,看看这类数据怎么用 Web Scraper 抓取。
  这条微博的直达链接是:
  看了他那么多的视频,为了表达感激,我们可以点进去为坤坤加一份阅读量。
  首先我们看看第 1 页转发的链接,长这个样子:
  第 2 页长这个样子,注意到多了个 #_rnd36 参数:
  #_rnd36
  第 3 页参数为 #_rnd39
  #_rnd39
  第 4 页参数为 #_rnd76:
  #_rnd76
  多看几个链接你就可以发现,这个转发网页的网址毫无规律可言,所以只能通过分页器去翻页加载数据。下面就开始我们的实战教学环节。
  1.创建 SiteMap
  我们首先创建一个 SiteMap,这次取名为 cxk,起始链接为
  
  2.创建容器的 selector
  因为我们要点击分页器,外面的容器的类型我们选为 Element Click,具体的参数解释可以看下图,我们之前在详细解释过一次,这里就不多言了。
  container 的预览是下图的样子:
  分页器选择的过程可以参看下图:
  3.创建子选择器
  这几个子选择器都比较简单,类型都是文字选择器,我们选择了评论用户名,评论内容和评论时间三种类型的内容。
  4.抓取数据
  按照 Sitemap cxk -> Scrape 的操作路径就可以抓取数据了。
  5.一些问题
  如果你看了我上面的教程立马去爬数据,可能遇到的第一个问题就是,300w 的数据,难道我全部爬下来吗?
  听上去也不太现实,毕竟 Web Scraper 针对的数据量都是相对比较小的,几万数据都算多的了,数据再大你就得考虑爬取时间是否太长,数据如何存储,如何应对网址的反爬虫系统(比如说冷不丁的跳出一个验证码,这个 Web Scraper 是无能为力的)。
  考虑到这个问题,前面的的教程你又看过的话,可能想着用 :nth-of-type(-n+N) 控制抓取 N 条数据。如果你尝试了,就会发现这个方法根本没用。
  失效的原因其实涉及到一点点网页的知识了,感兴趣的话可以看看下面的解释,不感兴趣可以直接看最后的结论。
  像我前面介绍的和,他们新加载的数据,是在当前页面追加的,你一直下拉,数据一直加载,同时网页的滚动条会越来越短,这意味着所有的数据都在同一个页面。
  当我们用 :nth-of-type(-n+N) 控制加载数量时,其实相当于在这个网页设立一个计数器,当数据一直累加到我们想要的数量时,就会停止抓取。
  但是对于使用翻页器的网页,每次的翻页相当于刷新当前网页,这样每次都会设立一个计数器。
  比如说你想抓取 1000 条数据,但是第 1 页网页只有 20 条数据,抓到最后一条了,还差 980 条;然后一翻页,又设立一个新的计数器,抓完第 2 页的最后一条数据,还差 980,一翻页计数器就重置,又变成 1000 了......所以这个控制数量的方法就失效了。
  所以结论就是,如果翻页器类型的网页想提前结束抓取,只有断网的这种方法。当然,如果你有更好的方案,可以在评论里回复我,我们可以互相讨论一下。
  6.总结
  分页器是一种很常见的网页分页方法,我们可以通过 Web Scraper 中的 Element click 处理这种类型的网页,并通过断网的方法结束抓取。
  <p style="margin-top: 10px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;letter-spacing: 1.5px;line-height: normal;">● 简易数据分析(六):Web Scraper 翻页——抓取「滚动加载」类型网页
  ● 简易数据分析(二):Web Scraper 初尝鲜,抓取豆瓣高分电影
  ● 简易数据分析 (一):源起、了解 Web Scraper 与浏览器技巧
  <br /></p>
  ·END·
  图雀社区
  汇聚精彩的免费实战教程

四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话

网站优化优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-07-17 03:56 • 来自相关话题

  四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话
  在过去两年时间里,阿里达摩院对话智能团队(Conversational AI)围绕 TableQA 做了一系列探索,先后在四大国际权威榜单上取得第一名,并且开源了首个中文预训练表格模型。同时,把 TableQA 技术落地为产品,在阿里云智能客服中开始规模化推广,成为具备差异化竞争力的新产品。本文将对达摩院在 TableQA 技术方向的系列探索创新和业务落地做系统的梳理介绍。
  图 1:达摩院 TableQA 先后取得四大榜单第一
  在日常工作中,Excel 表格随处可见;在 APP 或网页中,表格是清晰友好的信息传递方式;在企业中,关系型数据库无所不在。由于表格数据结构清晰、易于维护,并且对人类理解和机器理解都比较友好,表格 / 关系型数据库是各行各业应用最普遍的结构化知识存储形式。
  但在表格知识的查询交互中,门槛却不低:对话系统或搜索引擎,并不能很好地将表格知识作为答案查询出来,而关系型数据库的查询更需要专业技术人员撰写查询语句(如 SQL 语句)来完成,对大多数用户来讲门槛更高。表格问答技术(TableQA)通过将自然语言转换为 SQL 查询语言,允许用户使用自然语言与表格知识直接交互,为表格知识的大规模交互使用铺平了道路。
  1. 什么是 TableQA
  什么是表格问答(TableQA)呢,我们通过一个例子来引入。如下图班级学生信息的 Table,用户可能会问:“告诉我 3 班最高的男生有多高?”。要想解决这个问题,需要先把自然语言转换成一个 SQL 语句,然后利用该 SQL 查询表格,最终得到答案。整个 TableQA 的基础问题就是如何解析自然语言:把自然语言文本转变为一个 SQL 语句。
  如果进一步考虑到多轮的情况,用户可能会接着上文问:“那最矮的呢?”,这个时候就需要利用上下文进行对话管理。除此之外,表格中的内容一般比较简练,经常是以实体词的方法呈现,比如身高值可能就是 “186”,如果只把这个数字返回给用户,可读性非常不友好。优雅的方式是结合上下文回复 “三班最高的男生有 1 米 86”,这就需要一个忠实且流畅的自然语言生成能力。
  图 2:TableQA 技术框架图
  由于表格内容复杂多样,涉及各行各业的专业知识,SQL 的标注难度大且成本高昂,模型迁移能力差,TableQA 一直是自然语言处理领域的难题。
  2. TableQA 的发展及难点
  TableQA 最早于 1972 年[1] 在数据库领域被提出,但在很长的时间里发展缓慢。但从 2017 年开始 [2],随着深度学习的蓬勃发展,该方向重新获得研究人员的关注,在过去几年里成为发展最快的一种问答方式。
  根据任务设定的复杂程度,TableQA 技术发展可以分为四个重要阶段:单表单轮、从单表到多表、从单轮到多轮、从理解到生成。
  图 3. TableQA 发展简史
  2.1. 单表单轮
  单表单轮是指用户只围绕一张表格进行单轮问答,该任务涉及的 SQL 类型较为简单,但在任务提出初期仍然极具挑战。比如在 2017 年单表单轮的数据集 WikiSQL [2] 推出时,仅有 36% 左右的准确率。该任务主要存在如下难点:
  一个直接的想法是将自然语言到 SQL 的转换过程看做序列到序列生成问题,但在领域初期,受限于无法保证序列生成的结果准确性,表现一直不佳。而相比直接利用 Seq2Seq 建模,后续大部分的工作将 SQL 的生成过程转换为等价的分类问题 (Seq2Set) [3]。如下图 4 所示,通过将 SQL 拆解为不同的子模块,比如 SELECT、WHERE 等,然后利用多任务的方式进行子模块的预测,最后进行 SQL 的组合。这样不仅可以保证 SQL 语法正确,速度上也有明显优势。
  图 4:基于 Seq2Set [3] 的 Text-to-SQL 示意图
  在这套框架下,研究人员展开了一系列的改进,比如子模块的模型设计 [4]、引入表格的类型信息[5]、将执行结果作为弱监督的训练标签等[6]。除此之外,一些工作专注于模式链接的改进,比如引入规则的方式执行链接,或利用 attention 的方式[7],又或者通过将模式链接转换为等价任务[8,9] 进行辅助学习。
  2.2. 从单表到多表
  单表单轮问题的设置较为简单,在真实世界的场景中,表格更多是以多张表的形式(特别是关系型数据库)出现的,这将涉及到多个表的联合查询。而且 SQL 语句的复杂程度也变得非常复杂,涉及到了 JOIN、UNION 等高级关键字。
  图 5:多表查询的复杂 SQL 示例
  相比单表单轮,多表单轮的任务主要存在以下难点:
  对于复杂的 SQL 语句,很难将其拆解为分类问题进行预测,所以学术界又回归到 Seq2Seq 过程,考虑如何设计有约束的生成过程,保证语法正确性。主流的工作在解码的过程中引入 AST 结构,利用树解码的方式建模语法规则[10]。
  图 6:Text-to-SQL 任务中的树状解码约束示意图[11]
  对于多表之间的结构,主要体现在外键、主键等,这些信息对于模型预测多表联合至关重要。一些研究人员将这种结构抽象为图的形式,并利用图神经网络进行学习[12]。
  图 7:Text-to-SQL 中将 Schema 建模为 Graph 示意图[12]
  对于模式链接,一些工作开始结合 Transformer 设计更好的模式链接模块,比如 RAT-SQL[18]、LGESQL[19] 等,这些方法更充分地考虑了自然语言中的单词到数据库模式的表、列、值的多粒度链接,极大地提升了模型的性能。近期,人们又开始关注面向表格的预训练模型,模式链接任务也成为重要的预训练目标,利用预训练强大的泛化能力,从而缓解跨领域问题。
  2.3. 从单轮到多轮
  很多情况下,用户需要与表格进行多轮的交互才能完成信息获取,所以 TableQA 进入了第三个阶段,从单轮问答升级为多轮问答,并可以和对话系统进行结合。对于多表多轮,难点主要围绕多轮建模:
  多轮理解一直是对话领域重要的方向,对于多轮问题的建模,通常有直接拼接、轮次 attention 和 gate attention 等方式:
  图 8:多轮建模中的直接拼接、turn attention 和 gate attention 示例 [11]
  与普通的多轮问答相比,TableQA 在历史轮次中生成的 SQL 也表达了丰富的上下文信息,且相比自然语言更加结构化,所以一些工作将历史的 SQL 作为当前轮的输入,增强上文信息。随着单轮的表格预训练模型的蓬勃发展,针对多轮的表格预训练模型也应运而生,进一步提升了多表多轮 TableQA 的理解性能。
  
  2.4. 从理解到生成
  模型生成 SQL 后执行查询,得到的结果仍然是表格,不利于用户阅读,所以 TableQA 需要构建回复生成能力。近年来预训练生成模型如 GPT、T5 等在文本生成相关任务中取得了显著提升,在 Table-to-Text 方向、KGPT 和 TableGPT 等模型也在关注基于结构化表格数据生成对应的文字描述。而 TableQA 的回复生成任务则给文本生成的方向带来了新的挑战:
  目前该方向的研究工作还处于比较空白的状态,具有较高的研究和应用价值。
  3. 达摩院取得四大国际榜单第一
  近些年来,TableQA 任务得到了学术界及工业届的共同关注,并取得了飞速的发展。而 Text-to-SQL 作为 TableQA 的核心技术 ,学术界推出了包括单表单轮 WikiSQL[2]、多表单轮 Spider[13]、多表多轮 SparC[14]、对话式 CoSQL[15] 等四个权威的国际公开数据集及榜单。根据每个数据库包含的表数量,可以分为单表和多表 (WikiSQL, Spider)问题,其中多表要求 SQL 有表格选择(join)的能力,生成的 SQL 较为复杂;根据问句的交互轮次,可以分为单轮和多轮 (SParC),多轮问题涉及到多轮理解,对模型的指代消歧及上下文建模能力提出了要求。进一步的,Text-to-SQL 可以融入到对话系统 (CoSQL),对理解、策略和生成能力提出了更高的要求,进一步提升任务的难度。
  3.1. 单表单轮 WikiSQL
  (1)WikiSQL 数据集介绍
  WikiSQL[2] 数据集是 Salesforce 在 2017 年提出的 Text-to-SQL 数据集,它包含了 26,521 个表格,80,645 条自然语言问句及其对应的 SQL 语句。WikiSQL 数据集存在单轮问句、围绕单表、SQL 类型简单等特点,如下图所示,WikiSQL 仅围绕一张表格进行简单问题的问答,所以设计到的 SQL 也只包含 SELECT、AGG、WHERE、CONDITION、OP 等关键字。
  图 9:WikiSQL 数据示例[2]
  尽管 WikiSQL 的数据构造较为简单,但在真实工业场景中,简单问题也是最常见的查询,先解决简单数据是后续的基础,所以达摩院团队先针对 WikiSQL 展开了研究。Text-to-SQL 的目标是将自然语言问题,依据数据库信息(schema) 得到可执行的 SQL。上面提到的模式链接(schema linking),即找到自然语言问题和模式之间的关联是转换过程中的核心步骤。当前,对于模式链接的识别与建模已经成了 Text-to-SQL 任务中的重要瓶颈。
  (2)SDSQL 模型取得第一
  为了更好地解决模式链接问题,达摩院创新性地提出了 Schema Dependency [16] 的建模方式:借助已有的 SQL 解析出细粒度的链接关系,作为自然语言问题和 Schema 之间的桥梁。
  图 10:SDSQL 模型中的的 Schema Dependency 示意图[16]
  基于这种建模方式,达摩院提出一种新的解析模型 SDSQL。如下图 11 所示,将自然语言问题与 Schema 作为输入,然后利用多任务的方式优化模型:一个任务是利用双仿射的网络结构来预测解析好的 Schema Dependency,强化模型的模式链接能力;另一个任务是通过分类的方式来预测 SQL 中的每一个组件,从而完成 SQL 的预测。
  图 11:SDSQL 模型结构图[16]
  就效果而言,2021 年 3 月, SDSQL 在 WikiSQL 上取得了 SOTA 的成绩:
  图 12:达摩院提出的 SDSQL 模型在 WikiSQL 取得第一
  3.2. 多表单轮 Spider
  (1)Spider 榜单介绍
  Spider [13] 是耶鲁大学 & Salesforce 在 EMNLP 2018 上提出的单轮、围绕多表、复杂 SQL 的语义解析和 Text-to-SQL 数据集。Spider 是目前 Text-to-SQL 领域最受关注的数据集,吸引了阿里达摩院、微软、Meta、亚马逊、百度等大厂的持续投入。
  该数据集包含了 10,181 个问题和 5,693 个不同的复杂 SQL 查询语句,涉及 200 个多表数据库,涵盖 138 个不同的领域。相比 WikiSQL 的简单 SQL 形式,Spider 包含了大量复杂的 SQL (如 GROUP BY、ORDER BY 或嵌套查询)以及具备多个表和外键的数据库。
  图 13:Spider 数据示例[13]
  (2)SSSQL 模型取得第一
  大家对于 Spider 的建模主要围绕结构层面展开,之前提到的模式链接其实是自然语言问题和 Schema 之间的结构建模。另外一些工作主要关注于 Schema 内部的建模,将 Schema 中的表、列、外键信息转换为图的形式,融入网络进行学习。而达摩院首先关注到了自然语言问题内部结构对 Text-to-SQL 任务的重要性。
  如下图 14 所示,在模式连接正确的情况下,仍然无法预测到正确的 SQL。在这个例子中,因为按照词粒度的距离 id 和 date 的距离很远,导致在 SELECT 部分丢失了 transcript_id 这一列。
  图 14:因未考虑问题内部结构产生的错误示例
  为了解决上述问题,达摩院利用句法关系建模了自然语言问题内部的关系,在句法距离的度量下,id 和 date 的关系将被拉近,从而生成正确的 SQL。基于这个动机,达摩院提出了 SSSQL,将自然语言内部的结构、Schema 内部的结构以及自然语言与 Schema 之间的结构同时建模,并结合一种关系解耦的优化方法,实现了更强的表征能力。
  就效果而言,2021 年 9 月, SSSQL 在 Spider 上取得了 SOTA 的成绩:
  图 15:达摩院提出的 S²SQL 模型在 Spider 榜单取得第一
  3.3. 多表多轮 SParC
  (1)SParC 榜单介绍
  WikiSQL 和 Spider 都是单轮的 Text-to-SQL 数据,耶鲁大学 & Salesforce 于 ACL 2019 提出有上下文依赖的多轮数据集 SParC[14],作者基于 Spider 进行多轮扩展。不同于 Spider 一句话对应一个最终 SQL,SParC 通常需要通过多轮对话来实现用户的查询意图,并且在交互过程中,用户会省略很多之前提到的信息,或者新增、修改之前提到过一些内容,使得该任务更具挑战性。
  
  图 16:SParC 数据示例[17]
  (2)R²SQL 模型取得第一
  R²SQL[17] 模型的内容详见下一部分。2020 年 7 月,R²SQL 模型在 SParC 榜单取得第一。
  图 17:达摩院提出的 R²SQL 模型在 SParC 榜单取得第一
  3.4. 对话式 CoSQL
  (1)CoSQL 榜单介绍
  EMNLP 2019 提出的 CoSQL[15] 将 Text-to-SQL 融入到对话场景,仅存在 3,007 条问题 - SQL 对,但在交互过程中增加了拒识、澄清等轮次,并且需要验证返回的结果后,生成类人的自然语言回复。同时,数据集中 SQL 各关键字的分布差异较大,是目前 Text-to-SQL 领域最难、最复杂的数据集。
  (2)R²SQL 模型取得第一
  总体来说,SParC 和 CoSQL 遇到的共同挑战在于上下文建模,如何在上下文环境下共同建模自然语言问题、Schema,以及模式链接是亟需解决的问题。达摩院在 AAAI 2021 提出了一种基于动态上下文模式图的框架 R²SQL[17],可以联合地学习自然语言问题、数据库模式(schema)和其之间模式链接的表征,捕捉复杂的上下文依赖。
  图 18:R²SQL 模型中的动态模式图
  除此之外,在用户不断询问的过程中,存在用户聚焦的意图发生变化的现象,而这种话题偏移将导致模型的性能下降。为了解决这个问题,达摩院使用类人的想法,使用衰减机制来降低之前模式链接的权重,从而更关注当前轮次的模式链接。2020 年 8 月,R²SQL 模型在取得 CoSQL 榜单第一名。
  图 19:达摩院提出的 R²SQL 模型在 CoSQL 榜单取得第一
  4. 开源中文首个预训练表格模型
  达摩院对话智能团队提出了基于 “模式依存” 的表格预训练模型,普遍提升各场景表格的问答准确率。如下图 20 所示,模式依存就是在自然语言问句和表格结构模式之间建立依存关系,比如先让模型学习到 “男生” 和“性别”之间存在依存关系,进一步还可以定义这种依存关系的具体名称为 “WHERE-value”。同时,达摩院团队还使用了模仿人类的“课程学习” 方法来克服多样化难度数据带来的影响。
  图 20:Schema Dependency 示例
  在耶鲁大学发布的业界最大规模的英文文本 - 表格数据集 WikiSQL,以及微软构建的英文文本 - 表格高难度预测任务 SQuALL 数据集上,SDCUP 模型均取得业界最优效果。详细内容参见《》。相关模型和训练代码已经开源于阿里巴巴预训练模型体系 AliceMind。
  AliceMind项目地址:
  5. TableQA 规模化业务落地
  达摩院 Conversational AI 团队已经将本文介绍的预训练表格模型和相关 Text-to-SQL 技术应用于阿里云智能客服 (云小蜜) 的 TableQA 产品中。为满足不同场景下的训练和交付需求,表格管理、数据配置、模型训练、效果干预等功能已全部完成产品化,基本做到知识梳理低成本,问答构建高速度,模型训练好效果,满足各个场景的交付运维需求。目前已在多个项目中开始规模化交付。
  图 21:TableQA 在阿里云智能客服中的产品
  6. 未来的技术展望
  经过过去两年的探索,达摩院在 TableQA 方向,从单轮到多轮,从单表到多表,从下游模型到上游预训练表格模型,初步形成了比较体系的创新。但总体上,TableQA 还是一个新方向,面向未来,还有很多难题需要研究:
  大规模预训练表格理解模型;
  大规模预训练表格生成模型;
  更强大的 Text-to-SQL 模型;
  忠实流畅类人的 TableNLG;
  端到端开箱即用的 TableQA 系统;
  推广到更多的应用场景。
  欢迎感兴趣的同学一起学习交流。
  本文作者、阿里巴巴集团达摩院Conversational AI负责人李永彬将于2月底在机器之心机动组视频直播中分享「TableQA」的技术内容,敬请期待!
  参考资料
  [1] Woods, W。 A。, Kaplan, R。, and Webber, N。 B。 The LUNAR sciences natural language information system: Final report。 Technical Report BBN Report No。 2378, Bolt Beranek and Newman, Cambridge, Massachusetts。 (1972)[2] Zhong, Victor, Caiming Xiong, and Richard Socher。 "Seq2sql: Generating structured queries from natural language using reinforcement learning。" arXiv preprint arXiv:1709。00103 (2017)。[3] Xu, Xiaojun, Chang Liu, and Dawn Song。 "Sqlnet: Generating structured queries from natural language without reinforcement learning。
  " ICLR (2018)[4] Lyu, Qin, et al。 "Hybrid ranking network for text-to-sql。" arXiv preprint arXiv:2008。04759 (2020)。[5] Yu, Tao, et al。 "Typesql: Knowledge-based type-aware neural text-to-sql generation。" NAACL (2018)。[6] Wang, Chenglong, et al。 "Robust text-to-sql generation with execution-guided decoding。" arXiv preprint arXiv:1807。03100 (2018)[7] Hwang, Wonseok, et al。 "A comprehensive exploration on wikisql with table-aware word contextualization。" arXiv preprint arXiv:1902。01069 (2019)。[8] Ma, Jianqiang, et al。
   "Mention extraction and linking for sql query generation。" EMNLP(2020)。[9] Xuan, Kuan, et al。 "SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising。" arXiv preprint arXiv:2105。07911 (2021)。[10] Yin, Pengcheng, and Graham Neubig。 "A syntactic neural model for general-purpose code generation。" ACL (2017)。[11] Liu, Qian, et al。 "How far are we from effective context modeling? an exploratory study on semantic parsing in context。" IJCAI (2020)。[12] Bogin, Ben, Matt Gardner, and Jonathan Berant。
   "Representing schema structure with graph neural networks for text-to-sql parsing。" arXiv preprint arXiv:1905。06241 (2019)。[13] Yu, Tao, et al。 "Spider: A large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-sql task。" EMNLP (2018)。[14] Yu, Tao, et al。 "Sparc: Cross-domain semantic parsing in context。" ACL (2019)。[15] Yu, Tao, et al。 "CoSQL: A conversational text-to-SQL challenge towards cross-domain natural language interfaces to databases。" EMNLP (2019)。
  [16] Hui, Binyuan, et al。 "Improving Text-to-SQL with Schema Dependency Learning。" arXiv preprint arXiv:2103。04399 (2021)。[17] Hui, Binyuan, et al。 "Dynamic Hybrid Relation Exploration Network for Cross-Domain Context-Dependent Semantic Parsing。" AAAI (2021)。[18] Wang, Bailin, et al。 "Rat-sql: Relation-aware schema encoding and linking for text-to-sql parsers。" ACL (2019)。[19] Cao, Ruisheng, et al。 "LGESQL: Line Graph Enhanced Text-to-SQL Model with Mixed Local and Non-Local Relations。" ACL (2021)。
  新的一年你能有多「虎」机器之心联合千寻位置邀请大家一起来测虎力造北斗元气满满迎新春转发游戏结束后的虎力值海报到机器之心公众号后台即有机会赢取限量版「虎力全开」新年礼盒截至2022年1月30日赶紧扫码玩起来
  ©THE END 查看全部

  四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话
  在过去两年时间里,阿里达摩院对话智能团队(Conversational AI)围绕 TableQA 做了一系列探索,先后在四大国际权威榜单上取得第一名,并且开源了首个中文预训练表格模型。同时,把 TableQA 技术落地为产品,在阿里云智能客服中开始规模化推广,成为具备差异化竞争力的新产品。本文将对达摩院在 TableQA 技术方向的系列探索创新和业务落地做系统的梳理介绍。
  图 1:达摩院 TableQA 先后取得四大榜单第一
  在日常工作中,Excel 表格随处可见;在 APP 或网页中,表格是清晰友好的信息传递方式;在企业中,关系型数据库无所不在。由于表格数据结构清晰、易于维护,并且对人类理解和机器理解都比较友好,表格 / 关系型数据库是各行各业应用最普遍的结构化知识存储形式。
  但在表格知识的查询交互中,门槛却不低:对话系统或搜索引擎,并不能很好地将表格知识作为答案查询出来,而关系型数据库的查询更需要专业技术人员撰写查询语句(如 SQL 语句)来完成,对大多数用户来讲门槛更高。表格问答技术(TableQA)通过将自然语言转换为 SQL 查询语言,允许用户使用自然语言与表格知识直接交互,为表格知识的大规模交互使用铺平了道路。
  1. 什么是 TableQA
  什么是表格问答(TableQA)呢,我们通过一个例子来引入。如下图班级学生信息的 Table,用户可能会问:“告诉我 3 班最高的男生有多高?”。要想解决这个问题,需要先把自然语言转换成一个 SQL 语句,然后利用该 SQL 查询表格,最终得到答案。整个 TableQA 的基础问题就是如何解析自然语言:把自然语言文本转变为一个 SQL 语句。
  如果进一步考虑到多轮的情况,用户可能会接着上文问:“那最矮的呢?”,这个时候就需要利用上下文进行对话管理。除此之外,表格中的内容一般比较简练,经常是以实体词的方法呈现,比如身高值可能就是 “186”,如果只把这个数字返回给用户,可读性非常不友好。优雅的方式是结合上下文回复 “三班最高的男生有 1 米 86”,这就需要一个忠实且流畅的自然语言生成能力。
  图 2:TableQA 技术框架图
  由于表格内容复杂多样,涉及各行各业的专业知识,SQL 的标注难度大且成本高昂,模型迁移能力差,TableQA 一直是自然语言处理领域的难题。
  2. TableQA 的发展及难点
  TableQA 最早于 1972 年[1] 在数据库领域被提出,但在很长的时间里发展缓慢。但从 2017 年开始 [2],随着深度学习的蓬勃发展,该方向重新获得研究人员的关注,在过去几年里成为发展最快的一种问答方式。
  根据任务设定的复杂程度,TableQA 技术发展可以分为四个重要阶段:单表单轮、从单表到多表、从单轮到多轮、从理解到生成。
  图 3. TableQA 发展简史
  2.1. 单表单轮
  单表单轮是指用户只围绕一张表格进行单轮问答,该任务涉及的 SQL 类型较为简单,但在任务提出初期仍然极具挑战。比如在 2017 年单表单轮的数据集 WikiSQL [2] 推出时,仅有 36% 左右的准确率。该任务主要存在如下难点:
  一个直接的想法是将自然语言到 SQL 的转换过程看做序列到序列生成问题,但在领域初期,受限于无法保证序列生成的结果准确性,表现一直不佳。而相比直接利用 Seq2Seq 建模,后续大部分的工作将 SQL 的生成过程转换为等价的分类问题 (Seq2Set) [3]。如下图 4 所示,通过将 SQL 拆解为不同的子模块,比如 SELECT、WHERE 等,然后利用多任务的方式进行子模块的预测,最后进行 SQL 的组合。这样不仅可以保证 SQL 语法正确,速度上也有明显优势。
  图 4:基于 Seq2Set [3] 的 Text-to-SQL 示意图
  在这套框架下,研究人员展开了一系列的改进,比如子模块的模型设计 [4]、引入表格的类型信息[5]、将执行结果作为弱监督的训练标签等[6]。除此之外,一些工作专注于模式链接的改进,比如引入规则的方式执行链接,或利用 attention 的方式[7],又或者通过将模式链接转换为等价任务[8,9] 进行辅助学习。
  2.2. 从单表到多表
  单表单轮问题的设置较为简单,在真实世界的场景中,表格更多是以多张表的形式(特别是关系型数据库)出现的,这将涉及到多个表的联合查询。而且 SQL 语句的复杂程度也变得非常复杂,涉及到了 JOIN、UNION 等高级关键字。
  图 5:多表查询的复杂 SQL 示例
  相比单表单轮,多表单轮的任务主要存在以下难点:
  对于复杂的 SQL 语句,很难将其拆解为分类问题进行预测,所以学术界又回归到 Seq2Seq 过程,考虑如何设计有约束的生成过程,保证语法正确性。主流的工作在解码的过程中引入 AST 结构,利用树解码的方式建模语法规则[10]。
  图 6:Text-to-SQL 任务中的树状解码约束示意图[11]
  对于多表之间的结构,主要体现在外键、主键等,这些信息对于模型预测多表联合至关重要。一些研究人员将这种结构抽象为图的形式,并利用图神经网络进行学习[12]。
  图 7:Text-to-SQL 中将 Schema 建模为 Graph 示意图[12]
  对于模式链接,一些工作开始结合 Transformer 设计更好的模式链接模块,比如 RAT-SQL[18]、LGESQL[19] 等,这些方法更充分地考虑了自然语言中的单词到数据库模式的表、列、值的多粒度链接,极大地提升了模型的性能。近期,人们又开始关注面向表格的预训练模型,模式链接任务也成为重要的预训练目标,利用预训练强大的泛化能力,从而缓解跨领域问题。
  2.3. 从单轮到多轮
  很多情况下,用户需要与表格进行多轮的交互才能完成信息获取,所以 TableQA 进入了第三个阶段,从单轮问答升级为多轮问答,并可以和对话系统进行结合。对于多表多轮,难点主要围绕多轮建模:
  多轮理解一直是对话领域重要的方向,对于多轮问题的建模,通常有直接拼接、轮次 attention 和 gate attention 等方式:
  图 8:多轮建模中的直接拼接、turn attention 和 gate attention 示例 [11]
  与普通的多轮问答相比,TableQA 在历史轮次中生成的 SQL 也表达了丰富的上下文信息,且相比自然语言更加结构化,所以一些工作将历史的 SQL 作为当前轮的输入,增强上文信息。随着单轮的表格预训练模型的蓬勃发展,针对多轮的表格预训练模型也应运而生,进一步提升了多表多轮 TableQA 的理解性能。
  
  2.4. 从理解到生成
  模型生成 SQL 后执行查询,得到的结果仍然是表格,不利于用户阅读,所以 TableQA 需要构建回复生成能力。近年来预训练生成模型如 GPT、T5 等在文本生成相关任务中取得了显著提升,在 Table-to-Text 方向、KGPT 和 TableGPT 等模型也在关注基于结构化表格数据生成对应的文字描述。而 TableQA 的回复生成任务则给文本生成的方向带来了新的挑战:
  目前该方向的研究工作还处于比较空白的状态,具有较高的研究和应用价值。
  3. 达摩院取得四大国际榜单第一
  近些年来,TableQA 任务得到了学术界及工业届的共同关注,并取得了飞速的发展。而 Text-to-SQL 作为 TableQA 的核心技术 ,学术界推出了包括单表单轮 WikiSQL[2]、多表单轮 Spider[13]、多表多轮 SparC[14]、对话式 CoSQL[15] 等四个权威的国际公开数据集及榜单。根据每个数据库包含的表数量,可以分为单表和多表 (WikiSQL, Spider)问题,其中多表要求 SQL 有表格选择(join)的能力,生成的 SQL 较为复杂;根据问句的交互轮次,可以分为单轮和多轮 (SParC),多轮问题涉及到多轮理解,对模型的指代消歧及上下文建模能力提出了要求。进一步的,Text-to-SQL 可以融入到对话系统 (CoSQL),对理解、策略和生成能力提出了更高的要求,进一步提升任务的难度。
  3.1. 单表单轮 WikiSQL
  (1)WikiSQL 数据集介绍
  WikiSQL[2] 数据集是 Salesforce 在 2017 年提出的 Text-to-SQL 数据集,它包含了 26,521 个表格,80,645 条自然语言问句及其对应的 SQL 语句。WikiSQL 数据集存在单轮问句、围绕单表、SQL 类型简单等特点,如下图所示,WikiSQL 仅围绕一张表格进行简单问题的问答,所以设计到的 SQL 也只包含 SELECT、AGG、WHERE、CONDITION、OP 等关键字。
  图 9:WikiSQL 数据示例[2]
  尽管 WikiSQL 的数据构造较为简单,但在真实工业场景中,简单问题也是最常见的查询,先解决简单数据是后续的基础,所以达摩院团队先针对 WikiSQL 展开了研究。Text-to-SQL 的目标是将自然语言问题,依据数据库信息(schema) 得到可执行的 SQL。上面提到的模式链接(schema linking),即找到自然语言问题和模式之间的关联是转换过程中的核心步骤。当前,对于模式链接的识别与建模已经成了 Text-to-SQL 任务中的重要瓶颈。
  (2)SDSQL 模型取得第一
  为了更好地解决模式链接问题,达摩院创新性地提出了 Schema Dependency [16] 的建模方式:借助已有的 SQL 解析出细粒度的链接关系,作为自然语言问题和 Schema 之间的桥梁。
  图 10:SDSQL 模型中的的 Schema Dependency 示意图[16]
  基于这种建模方式,达摩院提出一种新的解析模型 SDSQL。如下图 11 所示,将自然语言问题与 Schema 作为输入,然后利用多任务的方式优化模型:一个任务是利用双仿射的网络结构来预测解析好的 Schema Dependency,强化模型的模式链接能力;另一个任务是通过分类的方式来预测 SQL 中的每一个组件,从而完成 SQL 的预测。
  图 11:SDSQL 模型结构图[16]
  就效果而言,2021 年 3 月, SDSQL 在 WikiSQL 上取得了 SOTA 的成绩:
  图 12:达摩院提出的 SDSQL 模型在 WikiSQL 取得第一
  3.2. 多表单轮 Spider
  (1)Spider 榜单介绍
  Spider [13] 是耶鲁大学 & Salesforce 在 EMNLP 2018 上提出的单轮、围绕多表、复杂 SQL 的语义解析和 Text-to-SQL 数据集。Spider 是目前 Text-to-SQL 领域最受关注的数据集,吸引了阿里达摩院、微软、Meta、亚马逊、百度等大厂的持续投入。
  该数据集包含了 10,181 个问题和 5,693 个不同的复杂 SQL 查询语句,涉及 200 个多表数据库,涵盖 138 个不同的领域。相比 WikiSQL 的简单 SQL 形式,Spider 包含了大量复杂的 SQL (如 GROUP BY、ORDER BY 或嵌套查询)以及具备多个表和外键的数据库。
  图 13:Spider 数据示例[13]
  (2)SSSQL 模型取得第一
  大家对于 Spider 的建模主要围绕结构层面展开,之前提到的模式链接其实是自然语言问题和 Schema 之间的结构建模。另外一些工作主要关注于 Schema 内部的建模,将 Schema 中的表、列、外键信息转换为图的形式,融入网络进行学习。而达摩院首先关注到了自然语言问题内部结构对 Text-to-SQL 任务的重要性。
  如下图 14 所示,在模式连接正确的情况下,仍然无法预测到正确的 SQL。在这个例子中,因为按照词粒度的距离 id 和 date 的距离很远,导致在 SELECT 部分丢失了 transcript_id 这一列。
  图 14:因未考虑问题内部结构产生的错误示例
  为了解决上述问题,达摩院利用句法关系建模了自然语言问题内部的关系,在句法距离的度量下,id 和 date 的关系将被拉近,从而生成正确的 SQL。基于这个动机,达摩院提出了 SSSQL,将自然语言内部的结构、Schema 内部的结构以及自然语言与 Schema 之间的结构同时建模,并结合一种关系解耦的优化方法,实现了更强的表征能力。
  就效果而言,2021 年 9 月, SSSQL 在 Spider 上取得了 SOTA 的成绩:
  图 15:达摩院提出的 S²SQL 模型在 Spider 榜单取得第一
  3.3. 多表多轮 SParC
  (1)SParC 榜单介绍
  WikiSQL 和 Spider 都是单轮的 Text-to-SQL 数据,耶鲁大学 & Salesforce 于 ACL 2019 提出有上下文依赖的多轮数据集 SParC[14],作者基于 Spider 进行多轮扩展。不同于 Spider 一句话对应一个最终 SQL,SParC 通常需要通过多轮对话来实现用户的查询意图,并且在交互过程中,用户会省略很多之前提到的信息,或者新增、修改之前提到过一些内容,使得该任务更具挑战性。
  
  图 16:SParC 数据示例[17]
  (2)R²SQL 模型取得第一
  R²SQL[17] 模型的内容详见下一部分。2020 年 7 月,R²SQL 模型在 SParC 榜单取得第一。
  图 17:达摩院提出的 R²SQL 模型在 SParC 榜单取得第一
  3.4. 对话式 CoSQL
  (1)CoSQL 榜单介绍
  EMNLP 2019 提出的 CoSQL[15] 将 Text-to-SQL 融入到对话场景,仅存在 3,007 条问题 - SQL 对,但在交互过程中增加了拒识、澄清等轮次,并且需要验证返回的结果后,生成类人的自然语言回复。同时,数据集中 SQL 各关键字的分布差异较大,是目前 Text-to-SQL 领域最难、最复杂的数据集。
  (2)R²SQL 模型取得第一
  总体来说,SParC 和 CoSQL 遇到的共同挑战在于上下文建模,如何在上下文环境下共同建模自然语言问题、Schema,以及模式链接是亟需解决的问题。达摩院在 AAAI 2021 提出了一种基于动态上下文模式图的框架 R²SQL[17],可以联合地学习自然语言问题、数据库模式(schema)和其之间模式链接的表征,捕捉复杂的上下文依赖。
  图 18:R²SQL 模型中的动态模式图
  除此之外,在用户不断询问的过程中,存在用户聚焦的意图发生变化的现象,而这种话题偏移将导致模型的性能下降。为了解决这个问题,达摩院使用类人的想法,使用衰减机制来降低之前模式链接的权重,从而更关注当前轮次的模式链接。2020 年 8 月,R²SQL 模型在取得 CoSQL 榜单第一名。
  图 19:达摩院提出的 R²SQL 模型在 CoSQL 榜单取得第一
  4. 开源中文首个预训练表格模型
  达摩院对话智能团队提出了基于 “模式依存” 的表格预训练模型,普遍提升各场景表格的问答准确率。如下图 20 所示,模式依存就是在自然语言问句和表格结构模式之间建立依存关系,比如先让模型学习到 “男生” 和“性别”之间存在依存关系,进一步还可以定义这种依存关系的具体名称为 “WHERE-value”。同时,达摩院团队还使用了模仿人类的“课程学习” 方法来克服多样化难度数据带来的影响。
  图 20:Schema Dependency 示例
  在耶鲁大学发布的业界最大规模的英文文本 - 表格数据集 WikiSQL,以及微软构建的英文文本 - 表格高难度预测任务 SQuALL 数据集上,SDCUP 模型均取得业界最优效果。详细内容参见《》。相关模型和训练代码已经开源于阿里巴巴预训练模型体系 AliceMind。
  AliceMind项目地址:
  5. TableQA 规模化业务落地
  达摩院 Conversational AI 团队已经将本文介绍的预训练表格模型和相关 Text-to-SQL 技术应用于阿里云智能客服 (云小蜜) 的 TableQA 产品中。为满足不同场景下的训练和交付需求,表格管理、数据配置、模型训练、效果干预等功能已全部完成产品化,基本做到知识梳理低成本,问答构建高速度,模型训练好效果,满足各个场景的交付运维需求。目前已在多个项目中开始规模化交付。
  图 21:TableQA 在阿里云智能客服中的产品
  6. 未来的技术展望
  经过过去两年的探索,达摩院在 TableQA 方向,从单轮到多轮,从单表到多表,从下游模型到上游预训练表格模型,初步形成了比较体系的创新。但总体上,TableQA 还是一个新方向,面向未来,还有很多难题需要研究:
  大规模预训练表格理解模型;
  大规模预训练表格生成模型;
  更强大的 Text-to-SQL 模型;
  忠实流畅类人的 TableNLG;
  端到端开箱即用的 TableQA 系统;
  推广到更多的应用场景。
  欢迎感兴趣的同学一起学习交流。
  本文作者、阿里巴巴集团达摩院Conversational AI负责人李永彬将于2月底在机器之心机动组视频直播中分享「TableQA」的技术内容,敬请期待!
  参考资料
  [1] Woods, W。 A。, Kaplan, R。, and Webber, N。 B。 The LUNAR sciences natural language information system: Final report。 Technical Report BBN Report No。 2378, Bolt Beranek and Newman, Cambridge, Massachusetts。 (1972)[2] Zhong, Victor, Caiming Xiong, and Richard Socher。 "Seq2sql: Generating structured queries from natural language using reinforcement learning。" arXiv preprint arXiv:1709。00103 (2017)。[3] Xu, Xiaojun, Chang Liu, and Dawn Song。 "Sqlnet: Generating structured queries from natural language without reinforcement learning。
  " ICLR (2018)[4] Lyu, Qin, et al。 "Hybrid ranking network for text-to-sql。" arXiv preprint arXiv:2008。04759 (2020)。[5] Yu, Tao, et al。 "Typesql: Knowledge-based type-aware neural text-to-sql generation。" NAACL (2018)。[6] Wang, Chenglong, et al。 "Robust text-to-sql generation with execution-guided decoding。" arXiv preprint arXiv:1807。03100 (2018)[7] Hwang, Wonseok, et al。 "A comprehensive exploration on wikisql with table-aware word contextualization。" arXiv preprint arXiv:1902。01069 (2019)。[8] Ma, Jianqiang, et al。
   "Mention extraction and linking for sql query generation。" EMNLP(2020)。[9] Xuan, Kuan, et al。 "SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising。" arXiv preprint arXiv:2105。07911 (2021)。[10] Yin, Pengcheng, and Graham Neubig。 "A syntactic neural model for general-purpose code generation。" ACL (2017)。[11] Liu, Qian, et al。 "How far are we from effective context modeling? an exploratory study on semantic parsing in context。" IJCAI (2020)。[12] Bogin, Ben, Matt Gardner, and Jonathan Berant。
   "Representing schema structure with graph neural networks for text-to-sql parsing。" arXiv preprint arXiv:1905。06241 (2019)。[13] Yu, Tao, et al。 "Spider: A large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-sql task。" EMNLP (2018)。[14] Yu, Tao, et al。 "Sparc: Cross-domain semantic parsing in context。" ACL (2019)。[15] Yu, Tao, et al。 "CoSQL: A conversational text-to-SQL challenge towards cross-domain natural language interfaces to databases。" EMNLP (2019)。
  [16] Hui, Binyuan, et al。 "Improving Text-to-SQL with Schema Dependency Learning。" arXiv preprint arXiv:2103。04399 (2021)。[17] Hui, Binyuan, et al。 "Dynamic Hybrid Relation Exploration Network for Cross-Domain Context-Dependent Semantic Parsing。" AAAI (2021)。[18] Wang, Bailin, et al。 "Rat-sql: Relation-aware schema encoding and linking for text-to-sql parsers。" ACL (2019)。[19] Cao, Ruisheng, et al。 "LGESQL: Line Graph Enhanced Text-to-SQL Model with Mixed Local and Non-Local Relations。" ACL (2021)。
  新的一年你能有多「虎」机器之心联合千寻位置邀请大家一起来测虎力造北斗元气满满迎新春转发游戏结束后的虎力值海报到机器之心公众号后台即有机会赢取限量版「虎力全开」新年礼盒截至2022年1月30日赶紧扫码玩起来
  ©THE END

网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!

网站优化优采云 发表了文章 • 0 个评论 • 163 次浏览 • 2022-07-17 03:49 • 来自相关话题

  网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!
  吾爱资源集,关注每天好资源!
  今天小编给大家推荐两个可免费实用,且非常实用的神网站。一个一个看一下吧!
  01 白描网页版
  这个网站其实是白描APP的网页版,不用登陆,即可免费使用。主要包含三大功能:图片文字提取、电子表格识别以及扫描PDF转文字。
  首页如上图所示,小编主要测试了图片文字提取以及电子表格识别,图片文字提取是英文文字,小编进行了对比,非常准确!
  
  可以对应导出相应的文件格式,比如文字可以导出DOCX,表格可以导出成为EXCEL,如下图所示:
  地址:
  02I love PDF
  这个网站主要提供PDF的相关功能,小编对于PDF工具提供了很多,这款是网页版本,虽然对应有PC版本,但网页版更加方便!
  
  这上面的所有功能都可以免注册使用,而且对于PDF的大小没有限制,绝对的神器。如下,小编测试的PDF大小大概40多M,而且选择的高功能压缩!
  最后的结果:
  地址:
  好了,今天的分享就到这里,希望大家喜欢!
  喜欢的话记得点击“好看”支持哟! 查看全部

  网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!
  吾爱资源集,关注每天好资源!
  今天小编给大家推荐两个可免费实用,且非常实用的神网站。一个一个看一下吧!
  01 白描网页版
  这个网站其实是白描APP的网页版,不用登陆,即可免费使用。主要包含三大功能:图片文字提取、电子表格识别以及扫描PDF转文字。
  首页如上图所示,小编主要测试了图片文字提取以及电子表格识别,图片文字提取是英文文字,小编进行了对比,非常准确!
  
  可以对应导出相应的文件格式,比如文字可以导出DOCX,表格可以导出成为EXCEL,如下图所示:
  地址:
  02I love PDF
  这个网站主要提供PDF的相关功能,小编对于PDF工具提供了很多,这款是网页版本,虽然对应有PC版本,但网页版更加方便!
  
  这上面的所有功能都可以免注册使用,而且对于PDF的大小没有限制,绝对的神器。如下,小编测试的PDF大小大概40多M,而且选择的高功能压缩!
  最后的结果:
  地址:
  好了,今天的分享就到这里,希望大家喜欢!
  喜欢的话记得点击“好看”支持哟!

GPL页面表格奇奇怪怪的更新

网站优化优采云 发表了文章 • 0 个评论 • 138 次浏览 • 2022-06-21 07:30 • 来自相关话题

  GPL页面表格奇奇怪怪的更新
  
  
  今天是生信星球陪你的第863天
  
  大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
  就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
  这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
  0.因数据库和R包更新导致的问题
  从GPL页面上下载注释表格,是获取探针注释的方法之一,通常是找不到注释包的第二选择。
  更新之前的下载方式是(2022年之前我们的直播课堂上是这样讲的,2022年以及之后的课上已经更新好了):
  library(GEOquery)<br />a = getGEO("GPL570",destdir = ".")<br />b = a@dataTable@table<br />ids2 = b[,c("ID","Gene Symbol")]<br />
  更新之前:运行getGEO这句代码,函数会自动读取“GPL570.soft”文件,得到一个GPL对象。
  更新之后: GPL570.soft文件从原来的75M变成了现在的几十G,而且所有的平台soft都被压缩成了gz格式。压缩一下倒是不影响下载,但导致了工作目录下确实有GPL570.soft文件的情况下,函数也不识别,而是从网页上去下载GPL570.soft.gz,几十G,实在是duck不必。
  1.小的文件,方法不变
  当然,GPL570表格文件是本来就大(表格的大小在网页上有写),对于比较小的表格文件可以继续使用原来的方法:
  library(GEOquery)<br />a2 = getGEO("GPL7759",destdir = ".")<br />class(a2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  2.针对大文件的新方法
  针对这种比较大的注释文件,需要更改一下策略:
  从GPL570的网页上拉到最后,有一个文件:
  
  从网页上把它下载下来,放在工作目录,本地读取。
  b = read.table("GPL570-55999.txt",header = T,<br />                 quote = "\"",sep = "\t",check.names = F)<br />ids2 = b[,c("ID","Gene Symbol")]<br />colnames(ids2) = c("probe_id","symbol")<br />head(ids2)<br /><br />##    probe_id           symbol<br />## 1 1007_s_at DDR1 /// MIR4640<br />## 2   1053_at             RFC2<br />## 3    117_at            HSPA6<br />## 4    121_at             PAX8<br />## 5 1255_g_at           GUCA1A<br />## 6   1294_at MIR5193 /// UBA7<br />
  3.备用方法
  只要不是特别大的文件,可以先试试getgeo下载,如果网络不好导致失败,就从网页下载soft格式的文件。
  点开上面箭头所指的地方,就能网页下载soft文件了,文件大小还可以接受,不至于有几个G的。
  b2 = getGEO(filename = "GPL7759_family.soft.gz",destdir = ".")<br />class(b2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  如果因为代码看不懂,而跟不上正文的节奏,可以来找我,系统学习。以下课程都是循环开课。下一期的时间,点进去咨询微信咯 查看全部

  GPL页面表格奇奇怪怪的更新
  
  
  今天是生信星球陪你的第863天
  
  大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
  就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
  这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
  0.因数据库和R包更新导致的问题
  从GPL页面上下载注释表格,是获取探针注释的方法之一,通常是找不到注释包的第二选择。
  更新之前的下载方式是(2022年之前我们的直播课堂上是这样讲的,2022年以及之后的课上已经更新好了):
  library(GEOquery)<br />a = getGEO("GPL570",destdir = ".")<br />b = a@dataTable@table<br />ids2 = b[,c("ID","Gene Symbol")]<br />
  更新之前:运行getGEO这句代码,函数会自动读取“GPL570.soft”文件,得到一个GPL对象。
  更新之后: GPL570.soft文件从原来的75M变成了现在的几十G,而且所有的平台soft都被压缩成了gz格式。压缩一下倒是不影响下载,但导致了工作目录下确实有GPL570.soft文件的情况下,函数也不识别,而是从网页上去下载GPL570.soft.gz,几十G,实在是duck不必。
  1.小的文件,方法不变
  当然,GPL570表格文件是本来就大(表格的大小在网页上有写),对于比较小的表格文件可以继续使用原来的方法:
  library(GEOquery)<br />a2 = getGEO("GPL7759",destdir = ".")<br />class(a2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  2.针对大文件的新方法
  针对这种比较大的注释文件,需要更改一下策略:
  从GPL570的网页上拉到最后,有一个文件:
  
  从网页上把它下载下来,放在工作目录,本地读取。
  b = read.table("GPL570-55999.txt",header = T,<br />                 quote = "\"",sep = "\t",check.names = F)<br />ids2 = b[,c("ID","Gene Symbol")]<br />colnames(ids2) = c("probe_id","symbol")<br />head(ids2)<br /><br />##    probe_id           symbol<br />## 1 1007_s_at DDR1 /// MIR4640<br />## 2   1053_at             RFC2<br />## 3    117_at            HSPA6<br />## 4    121_at             PAX8<br />## 5 1255_g_at           GUCA1A<br />## 6   1294_at MIR5193 /// UBA7<br />
  3.备用方法
  只要不是特别大的文件,可以先试试getgeo下载,如果网络不好导致失败,就从网页下载soft格式的文件。
  点开上面箭头所指的地方,就能网页下载soft文件了,文件大小还可以接受,不至于有几个G的。
  b2 = getGEO(filename = "GPL7759_family.soft.gz",destdir = ".")<br />class(b2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  如果因为代码看不懂,而跟不上正文的节奏,可以来找我,系统学习。以下课程都是循环开课。下一期的时间,点进去咨询微信咯

Python+Streamlit在网页中提取PDF中文字、表格对象

网站优化优采云 发表了文章 • 0 个评论 • 179 次浏览 • 2022-06-19 13:11 • 来自相关话题

  Python+Streamlit在网页中提取PDF中文字、表格对象
  大家好,今天给大家带来的是结合Streamlit,我们提取PDF文档中的一些内容的方法,如提取PDF的基本信息、文本信息、表格。
  实现效果实现代码
<p>import streamlit as st<br />import pdfplumber<br />import io<br />from pandas import DataFrame<br />import pandas as pd<br />import fitz<br />import streamlit.components.v1 as components<br />st.set_page_config(page_title="操作PDF", layout="wide")<br /><br />css = """<br />#MainMenu {visibility:hidden;}<br />footer {visibility:hidden;}<br /><br />.stDownloadButton>button {<br />    background-color: #0099ff;<br />    color:#ffffff;<br />}<br /><br />.stDownloadButton>button:hover {<br />    background-color: #00ff00;<br />    color:#ff0000;<br />    }<br /><br />"""<br />st.markdown(css, unsafe_allow_html=True)<br /><br />def convert_df(df):<br />    st.download_button(<br />        label="点我下载表格",<br />        data=df.to_csv().encode('gbk'),<br />        file_name='table.csv',<br />        mime='text/csv',<br />    )<br /><br />def draw_table(df, theme, table_height):<br />    columns = df.columns<br />    thead1=""""""<br />    thead_temp = []<br />    for k in range(len(list(columns))):<br />        thead_temp.append(""""""+str(list(columns)[k])+"""""")<br />    header = thead1+"".join(thead_temp)+""""""<br />    rows = []<br />    rows_temp = []<br />    for i in range(df.shape[0]):<br />        rows.append(""""""+str(i+1)+"""""")<br />        rows_temp.append(df.iloc[i].values.tolist())<br />    td_temp = []<br />    for j in range(len(rows_temp)):<br />        for m in range(len(rows_temp[j])):<br />            td_temp.append(""""""+str(rows_temp[j][m])+"""""")<br />    td_temp2 = []<br />    for n in range(len(td_temp)):<br />        td_temp2.append(td_temp[n:n+df.shape[1]])<br />    td_temp3 = []<br />    for x in range(len(td_temp2)):<br />        if int(x % (df.shape[1])) == 0:<br />            td_temp3.append(td_temp2[x])<br />    td_temp4 = []<br />    for y in range(len(td_temp3)):<br />        td_temp4.append("".join(td_temp3[y]))<br />    td_temp5 = []<br />    for v in range(len(td_temp4)):<br />        td_temp5.append(""""""+str(v+1)+""""""+str(td_temp4[v])+"""""")<br />    table_html = """"""+\<br />    """"""+\<br />    """ 查看全部

  Python+Streamlit在网页中提取PDF中文字、表格对象
  大家好,今天给大家带来的是结合Streamlit,我们提取PDF文档中的一些内容的方法,如提取PDF的基本信息、文本信息、表格。
  实现效果实现代码
<p>import streamlit as st<br />import pdfplumber<br />import io<br />from pandas import DataFrame<br />import pandas as pd<br />import fitz<br />import streamlit.components.v1 as components<br />st.set_page_config(page_title="操作PDF", layout="wide")<br /><br />css = """<br />#MainMenu {visibility:hidden;}<br />footer {visibility:hidden;}<br /><br />.stDownloadButton>button {<br />    background-color: #0099ff;<br />    color:#ffffff;<br />}<br /><br />.stDownloadButton>button:hover {<br />    background-color: #00ff00;<br />    color:#ff0000;<br />    }<br /><br />"""<br />st.markdown(css, unsafe_allow_html=True)<br /><br />def convert_df(df):<br />    st.download_button(<br />        label="点我下载表格",<br />        data=df.to_csv().encode('gbk'),<br />        file_name='table.csv',<br />        mime='text/csv',<br />    )<br /><br />def draw_table(df, theme, table_height):<br />    columns = df.columns<br />    thead1=""""""<br />    thead_temp = []<br />    for k in range(len(list(columns))):<br />        thead_temp.append(""""""+str(list(columns)[k])+"""""")<br />    header = thead1+"".join(thead_temp)+""""""<br />    rows = []<br />    rows_temp = []<br />    for i in range(df.shape[0]):<br />        rows.append(""""""+str(i+1)+"""""")<br />        rows_temp.append(df.iloc[i].values.tolist())<br />    td_temp = []<br />    for j in range(len(rows_temp)):<br />        for m in range(len(rows_temp[j])):<br />            td_temp.append(""""""+str(rows_temp[j][m])+"""""")<br />    td_temp2 = []<br />    for n in range(len(td_temp)):<br />        td_temp2.append(td_temp[n:n+df.shape[1]])<br />    td_temp3 = []<br />    for x in range(len(td_temp2)):<br />        if int(x % (df.shape[1])) == 0:<br />            td_temp3.append(td_temp2[x])<br />    td_temp4 = []<br />    for y in range(len(td_temp3)):<br />        td_temp4.append("".join(td_temp3[y]))<br />    td_temp5 = []<br />    for v in range(len(td_temp4)):<br />        td_temp5.append(""""""+str(v+1)+""""""+str(td_temp4[v])+"""""")<br />    table_html = """"""+\<br />    """"""+\<br />    """

提取网站表格千万行,使用Power Query不用愁

网站优化优采云 发表了文章 • 0 个评论 • 299 次浏览 • 2022-06-18 12:23 • 来自相关话题

  提取网站表格千万行,使用Power Query不用愁
  有时候我们想要复制网站的表格,却发现无法复制,怎么办呢?这是网站为了保护数据直接被复制,而特意设置的技巧。Excel目前已经非常强大、智能. 我们可以通过Power Query快速提取网站表格。千万不要傻傻一个个复制数据了。
  这是腾讯网上关于海外疫情数据,你如果想直接复制,会发现,无法复制。现在我们可以通过Power Query快速简单获取网站数据表。
  操作步骤:
  1、首先复制网站网址,打开excel,必须是2016版本以上,才内置Power Query。
  单击数据选项栏——自网页,出现如下界面:
  
  将网站网址粘贴到URL框中,点击确定。
  GIF如下:
  2、连接成功之后,出现如下界面:
  选中右边的Table 0,也就是表格文件,点击:加载。
  GIF如下:
  加载的表格如下:
  如此我们就快速的将网站中的表格数据导出到excel中。小伙伴们,你学会了吗?赶紧试一下吧。接下来是激动人心的福利时刻:
  
  昨天获奖公布
   查看全部

  提取网站表格千万行,使用Power Query不用愁
  有时候我们想要复制网站的表格,却发现无法复制,怎么办呢?这是网站为了保护数据直接被复制,而特意设置的技巧。Excel目前已经非常强大、智能. 我们可以通过Power Query快速提取网站表格。千万不要傻傻一个个复制数据了。
  这是腾讯网上关于海外疫情数据,你如果想直接复制,会发现,无法复制。现在我们可以通过Power Query快速简单获取网站数据表。
  操作步骤:
  1、首先复制网站网址,打开excel,必须是2016版本以上,才内置Power Query。
  单击数据选项栏——自网页,出现如下界面:
  
  将网站网址粘贴到URL框中,点击确定。
  GIF如下:
  2、连接成功之后,出现如下界面:
  选中右边的Table 0,也就是表格文件,点击:加载。
  GIF如下:
  加载的表格如下:
  如此我们就快速的将网站中的表格数据导出到excel中。小伙伴们,你学会了吗?赶紧试一下吧。接下来是激动人心的福利时刻:
  
  昨天获奖公布
  

学Python=写爬虫?0代码爬下95%网站的数据

网站优化优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-06-18 02:23 • 来自相关话题

  学Python=写爬虫?0代码爬下95%网站的数据
  像知乎、微博这样的网站,可以挖掘不同话题的关注者,发掘潜在用户,或者爬取评论做词频分析,研究他们对某个产品或某个消息的反应。
  
  信息跟踪
  某个地方政策的网站最近有没有更新,某个关注的人最近发了什么微博?没有时间一直盯着刷,做一个爬虫,每周自动爬一次数据,随时获取最新的消息。
  
  批量下载
  在招标信息网站1分钟把和你企业有关的标书爬下来,分门别类发给商务部门;把图片分享网站的图片,族库网站上的下载地址,一次性抓取,再扔到迅雷里批量下载。可以大量节省一个一个下载的时间。
  求职和生活
  找工作的时候,批量爬取主流招聘网站上的相关职位,做成数据分析表,帮助自己快速找到合适的工作;租房的时候,爬取租房网站的信息,综合对比附近的房源价格;想买车,所有新车和二手车的相关数据,也能一起爬下来做对比。
  
  数据支撑
  对于你所处的行业现状、企业发展、人才分布,原本只能查到别人做好的零星数据,现在你可以自己去爬数据,再做成可视化图表,无论是对内做研究,还是对外做汇报,数据都能成为支撑你观点的利器。
  一次和@Vctcn93聊起爬虫,他这样说:
  
  有网站的地方就有数据,有数据的地方,就能用爬虫给抓下来。除了前面说的几个特定场景,一个对数据敏感的人应该长期锻炼:怎样提出一个问题,怎样去找能够洞悉问题的数据,以及怎样在海量的数据中发掘出自己想要的答案。
  这是大数据时代里,每一个小白观察和理解世界的方式。
  前些天我们出了一门PowerBI数据可视化分析课,教给你怎样把表格里的数据集中到一起,彼此关联,做出简洁漂亮的可视化报表。
  教程里面的几个案例的数据,都是用这个技巧爬下来的,比如:
  抓取招聘网站的数据,然后分析BIM的相关职位在不同地区、不同规模的企业怎样分布?怎样用5秒钟找到适合自己的工作岗位?
  
  用豆瓣电影TOP250的数据分析案例,教给你怎样在有限的页面里呈现更多维度的数据可视化。快速帮助别人选出一部适合自己的电影。
  
  抓取中国各省近三年的地产行业数据,分析不同地区、不同类型的地产项目,分年、分季度的增长情况,从而看出什么地方、哪个领域发展得更好?
  如果你学完了这套爬虫课,对数据分析有进一步的兴趣,可以扫码看看我们的数据分析和可视化课程,这两套课学下来,你就可以算是正式入门数据分析了。
  这次BIMBOX出品的《0代码网络爬虫课》,一共15讲,我们用豆瓣、知乎、京东、招标信息网、住建部官网、Pexels图片网站、IT桔子公司信息、族库网、知识星球、Bilibili等网站的不同案例,给你讲解了下面这些内容:
  
  正如课程的标题所说,整个学习过程和Python没有丝毫的关系,从头至尾不需要写一行代码,小白也能很快学会。
  学爬虫不等于学Python,它只是Python功能的一个分支而已。只不过在很多培训机构的宣传下,爬虫成了Python的代名词。
  通过这个教程,BIMBOX想要做的,是把拦在你面前高昂的学费和对代码的学习恐惧扫干净,让你花上一两天的时间感受到数据的魅力,和自动化带来的快乐。
  看着一个网页在屏幕上自动翻页、滚动,几分钟后成千上万行数据被抓取到一个表格里,那种快感和喜悦只有亲身体会过才能知道。
  《0代码网络爬虫课》,秉承BIMBOX的一贯风格,课程的声音干净,画面清晰,剪掉了50%的废话和停顿,让你学习得更轻松。
  另外,我们为这门课程开设了专门的学习交流微信群,加群的方式详见教程说明页,初学的时候一定会遇到各种问题,我们会和其他共同学习的小伙伴等你参与探讨。
  如果你想花两天时间,从数据小白到爬取数据的高手,就扫码拿下吧。
  有态度,有深度,BIMBOX,咱们下次见! 查看全部

  学Python=写爬虫?0代码爬下95%网站的数据
  像知乎、微博这样的网站,可以挖掘不同话题的关注者,发掘潜在用户,或者爬取评论做词频分析,研究他们对某个产品或某个消息的反应。
  
  信息跟踪
  某个地方政策的网站最近有没有更新,某个关注的人最近发了什么微博?没有时间一直盯着刷,做一个爬虫,每周自动爬一次数据,随时获取最新的消息。
  
  批量下载
  在招标信息网站1分钟把和你企业有关的标书爬下来,分门别类发给商务部门;把图片分享网站的图片,族库网站上的下载地址,一次性抓取,再扔到迅雷里批量下载。可以大量节省一个一个下载的时间。
  求职和生活
  找工作的时候,批量爬取主流招聘网站上的相关职位,做成数据分析表,帮助自己快速找到合适的工作;租房的时候,爬取租房网站的信息,综合对比附近的房源价格;想买车,所有新车和二手车的相关数据,也能一起爬下来做对比。
  
  数据支撑
  对于你所处的行业现状、企业发展、人才分布,原本只能查到别人做好的零星数据,现在你可以自己去爬数据,再做成可视化图表,无论是对内做研究,还是对外做汇报,数据都能成为支撑你观点的利器。
  一次和@Vctcn93聊起爬虫,他这样说:
  
  有网站的地方就有数据,有数据的地方,就能用爬虫给抓下来。除了前面说的几个特定场景,一个对数据敏感的人应该长期锻炼:怎样提出一个问题,怎样去找能够洞悉问题的数据,以及怎样在海量的数据中发掘出自己想要的答案。
  这是大数据时代里,每一个小白观察和理解世界的方式。
  前些天我们出了一门PowerBI数据可视化分析课,教给你怎样把表格里的数据集中到一起,彼此关联,做出简洁漂亮的可视化报表。
  教程里面的几个案例的数据,都是用这个技巧爬下来的,比如:
  抓取招聘网站的数据,然后分析BIM的相关职位在不同地区、不同规模的企业怎样分布?怎样用5秒钟找到适合自己的工作岗位?
  
  用豆瓣电影TOP250的数据分析案例,教给你怎样在有限的页面里呈现更多维度的数据可视化。快速帮助别人选出一部适合自己的电影。
  
  抓取中国各省近三年的地产行业数据,分析不同地区、不同类型的地产项目,分年、分季度的增长情况,从而看出什么地方、哪个领域发展得更好?
  如果你学完了这套爬虫课,对数据分析有进一步的兴趣,可以扫码看看我们的数据分析和可视化课程,这两套课学下来,你就可以算是正式入门数据分析了。
  这次BIMBOX出品的《0代码网络爬虫课》,一共15讲,我们用豆瓣、知乎、京东、招标信息网、住建部官网、Pexels图片网站、IT桔子公司信息、族库网、知识星球、Bilibili等网站的不同案例,给你讲解了下面这些内容:
  
  正如课程的标题所说,整个学习过程和Python没有丝毫的关系,从头至尾不需要写一行代码,小白也能很快学会。
  学爬虫不等于学Python,它只是Python功能的一个分支而已。只不过在很多培训机构的宣传下,爬虫成了Python的代名词。
  通过这个教程,BIMBOX想要做的,是把拦在你面前高昂的学费和对代码的学习恐惧扫干净,让你花上一两天的时间感受到数据的魅力,和自动化带来的快乐。
  看着一个网页在屏幕上自动翻页、滚动,几分钟后成千上万行数据被抓取到一个表格里,那种快感和喜悦只有亲身体会过才能知道。
  《0代码网络爬虫课》,秉承BIMBOX的一贯风格,课程的声音干净,画面清晰,剪掉了50%的废话和停顿,让你学习得更轻松。
  另外,我们为这门课程开设了专门的学习交流微信群,加群的方式详见教程说明页,初学的时候一定会遇到各种问题,我们会和其他共同学习的小伙伴等你参与探讨。
  如果你想花两天时间,从数据小白到爬取数据的高手,就扫码拿下吧。
  有态度,有深度,BIMBOX,咱们下次见!

50行代码!用Python抓取全网黑丝舞蹈视频!

网站优化优采云 发表了文章 • 0 个评论 • 139 次浏览 • 2022-06-17 02:15 • 来自相关话题

  50行代码!用Python抓取全网黑丝舞蹈视频!
  
  大家好 我是小菜!
  最近念头不通达,尤其是看了"凡人修仙传"里面的名场面,韩立和陈师姐在白菊山的文戏,感叹凡人有情,大道无情。好好的陈师姐不珍惜,心里就想着南宫婉!不过凡人制作组还是很牛逼的,能把凡人画面制作的这么精良,文戏精彩打戏牛逼,目前应该是最火的国漫了,累计播放破8亿了,有兴趣的同学可以看看。
  言归正传,今天小菜给大家谋取福利,真正的手把手教学,爬取某手上的黑丝小姐姐的舞蹈视频,一起来看看吧。
  
  1.众里寻“址”千百度,一招教你无难度
  想要抓取小姐姐的舞蹈视频,最为关键的一点是要找到视频的链接地址。有的小伙伴可能一时间不知道如何来寻找链接地址,小菜今天就教给大家一招。

  首先,打开快手的网页地址,输入关键词"黑丝舞蹈",网页会自动检索相关的舞蹈视频。
  按照上图中的序号顺序,在开发者模式下,进入到“网络”选项:在搜索一栏输入关键词后,浏览器便会自动检索到相应的链接地址。无需我们再花费精力来寻找链接地址,大大的提升了我们的效率。
  通过上图可以发现,真正的舞蹈视频的地址为“photoUrl”,所以我们要做的就是抓取这些地址,然后将视频保存到本地。
  通过点击标头可以发现,请求的方式为“POST”,这一点非常关键。

  既然请求方式为POST,那么请求的构造参数在哪里呢?点击”载荷“我们便可以看到请求的参数。
  
  请求的构造参数,包含了”operationName“、”variables“等变量。
  很多小伙伴可能会问,爬虫是如何抓取数据的呢?
  我们可以记住一句话,爬虫即为通过程序模仿浏览器的请求行为,向服务器发送数据请求。如下图所示:
  
  爬虫,通过模拟浏览器向服务器发送请求requests,服务器响应请求后,便会发挥响应response,这样便完成了一次数据的交互,我们便可以通过解析返回来的数据,抓取到我们需要的信息。
  搞清楚上述的内容后,接下来我们就看一下程序是如何实现的吧。
  2.程序实现
  程序的实现,可以分为四个步骤,分别为:
  发送请求
  获取数据
  解析数据
  保存数据
  对于发送请求和获取数据,程序如下图所示。

  程序中,第22行为发送请求,json表示的是上面讲到的请求参数,headers则是爬虫伪装浏览器所需的内容。防止服务器轻松识别出爬虫,导致我们的程序获取数据失败。
  第25行程序是获取服务器响应的数据。
  获取得到数据后,接下来就是解析数据和保存数据。
  
  由于服务器返回的数据是字典形式的数据,因此可以直接解析数据,并获取我们需要的内容。获取到视频的链接地址后,我们便可以将视频内容保存到本地。
  
  3.总结
  以上就是今天小菜为大家带来的福利分享,喜欢的小伙伴可以按照上面的步骤操作一下,当然也可以更换关键词。也欢迎在下方积极留言,给个三连,吱一声支持我们,我们下期不见不散~
  <p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;text-size-adjust: auto;">
  <br style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /></p> 查看全部

  50行代码!用Python抓取全网黑丝舞蹈视频!
  
  大家好 我是小菜!
  最近念头不通达,尤其是看了"凡人修仙传"里面的名场面,韩立和陈师姐在白菊山的文戏,感叹凡人有情,大道无情。好好的陈师姐不珍惜,心里就想着南宫婉!不过凡人制作组还是很牛逼的,能把凡人画面制作的这么精良,文戏精彩打戏牛逼,目前应该是最火的国漫了,累计播放破8亿了,有兴趣的同学可以看看。
  言归正传,今天小菜给大家谋取福利,真正的手把手教学,爬取某手上的黑丝小姐姐的舞蹈视频,一起来看看吧。
  
  1.众里寻“址”千百度,一招教你无难度
  想要抓取小姐姐的舞蹈视频,最为关键的一点是要找到视频的链接地址。有的小伙伴可能一时间不知道如何来寻找链接地址,小菜今天就教给大家一招。

  首先,打开快手的网页地址,输入关键词"黑丝舞蹈",网页会自动检索相关的舞蹈视频。
  按照上图中的序号顺序,在开发者模式下,进入到“网络”选项:在搜索一栏输入关键词后,浏览器便会自动检索到相应的链接地址。无需我们再花费精力来寻找链接地址,大大的提升了我们的效率。
  通过上图可以发现,真正的舞蹈视频的地址为“photoUrl”,所以我们要做的就是抓取这些地址,然后将视频保存到本地。
  通过点击标头可以发现,请求的方式为“POST”,这一点非常关键。

  既然请求方式为POST,那么请求的构造参数在哪里呢?点击”载荷“我们便可以看到请求的参数。
  
  请求的构造参数,包含了”operationName“、”variables“等变量。
  很多小伙伴可能会问,爬虫是如何抓取数据的呢?
  我们可以记住一句话,爬虫即为通过程序模仿浏览器的请求行为,向服务器发送数据请求。如下图所示:
  
  爬虫,通过模拟浏览器向服务器发送请求requests,服务器响应请求后,便会发挥响应response,这样便完成了一次数据的交互,我们便可以通过解析返回来的数据,抓取到我们需要的信息。
  搞清楚上述的内容后,接下来我们就看一下程序是如何实现的吧。
  2.程序实现
  程序的实现,可以分为四个步骤,分别为:
  发送请求
  获取数据
  解析数据
  保存数据
  对于发送请求和获取数据,程序如下图所示。

  程序中,第22行为发送请求,json表示的是上面讲到的请求参数,headers则是爬虫伪装浏览器所需的内容。防止服务器轻松识别出爬虫,导致我们的程序获取数据失败。
  第25行程序是获取服务器响应的数据。
  获取得到数据后,接下来就是解析数据和保存数据。
  
  由于服务器返回的数据是字典形式的数据,因此可以直接解析数据,并获取我们需要的内容。获取到视频的链接地址后,我们便可以将视频内容保存到本地。
  
  3.总结
  以上就是今天小菜为大家带来的福利分享,喜欢的小伙伴可以按照上面的步骤操作一下,当然也可以更换关键词。也欢迎在下方积极留言,给个三连,吱一声支持我们,我们下期不见不散~
  <p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;text-size-adjust: auto;">
  <br style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /></p>

Excel也能实现网页自动化

网站优化优采云 发表了文章 • 0 个评论 • 226 次浏览 • 2022-06-16 13:07 • 来自相关话题

  Excel也能实现网页自动化
  Excel也能实现网页自动化1、前言
  Excel网页自动化的实现主要是依靠开发工具里面的Visual Basic功能(VBA),通常都将其称作宏。这个功能在制作报表的时候很实用,例如我们经常登录网站下载数据,然后利用这些数据制作日报、周报、月报等各种固定格式的业绩报表,此时如果将网页自动化嵌入其中,完全可以实现一键生成Excel报表的功能,节省时间。
  2、网页元素2.1、简单介绍
  假如,我们现在想了解一下和“宏”相关的内容,此时打开百度网页,在搜索框中输入“宏”,然后点击右边的“百度一下”按钮,这时就会出现许多和“宏”相关的内容。
  上述的一系列动作,我们可以看到“搜索框”和“百度一下”的位置,但是这些对于计算机来说是无法判断的,计算机无法看到“搜索框”和“百度一下”在哪里。那么计算机是如何判断的呢?
  对于网页来说,每一个元素都会有id、class或name来标记,如果这个元素有id的话,我们可以直接通过id来锁定他的位置,因为一个网页的id是唯一的。但是如果这个元素没有id,只有name或者class就比较麻烦一点,因为这两个都不是唯一标记,同一个网站里面可能会有许多重名的。这时还需要借助其他的方式来进一步判断。
  2.2、查看元素的具体方法
  这里我们以百度为例:


  使用宏来操作网页,就怕遇到元素不带id属性的,因为这种不方便锁定位置。如果用python的话可以使用xpath来锁定。
  3、网页元素定位工具
  注意:除了getElementById中Element为单数之外,其他的都是复数Elements。
  4、网页源码的简单介绍

  5、小案例——网页内容输入及模拟点击
  百度搜索“宏”为列,代码的具体作用,已在代码块中写了注释。
  看一下效果:
  通过内容输入和模拟点击,不仅可以用于百度搜索,也可以用于网页的自动登录操作,将账号和密码,以同样的方式传递到对应元素中,然后模拟点击登录即可实现。
  6、网页内容提取
  我之前写过一篇,这个案例将InternetExplorer和正则表达结合在一起,提取目标网站的数据,感兴趣的同学可以参考。 查看全部

  Excel也能实现网页自动化
  Excel也能实现网页自动化1、前言
  Excel网页自动化的实现主要是依靠开发工具里面的Visual Basic功能(VBA),通常都将其称作宏。这个功能在制作报表的时候很实用,例如我们经常登录网站下载数据,然后利用这些数据制作日报、周报、月报等各种固定格式的业绩报表,此时如果将网页自动化嵌入其中,完全可以实现一键生成Excel报表的功能,节省时间。
  2、网页元素2.1、简单介绍
  假如,我们现在想了解一下和“宏”相关的内容,此时打开百度网页,在搜索框中输入“宏”,然后点击右边的“百度一下”按钮,这时就会出现许多和“宏”相关的内容。
  上述的一系列动作,我们可以看到“搜索框”和“百度一下”的位置,但是这些对于计算机来说是无法判断的,计算机无法看到“搜索框”和“百度一下”在哪里。那么计算机是如何判断的呢?
  对于网页来说,每一个元素都会有id、class或name来标记,如果这个元素有id的话,我们可以直接通过id来锁定他的位置,因为一个网页的id是唯一的。但是如果这个元素没有id,只有name或者class就比较麻烦一点,因为这两个都不是唯一标记,同一个网站里面可能会有许多重名的。这时还需要借助其他的方式来进一步判断。
  2.2、查看元素的具体方法
  这里我们以百度为例:


  使用宏来操作网页,就怕遇到元素不带id属性的,因为这种不方便锁定位置。如果用python的话可以使用xpath来锁定。
  3、网页元素定位工具
  注意:除了getElementById中Element为单数之外,其他的都是复数Elements。
  4、网页源码的简单介绍

  5、小案例——网页内容输入及模拟点击
  百度搜索“宏”为列,代码的具体作用,已在代码块中写了注释。
  看一下效果:
  通过内容输入和模拟点击,不仅可以用于百度搜索,也可以用于网页的自动登录操作,将账号和密码,以同样的方式传递到对应元素中,然后模拟点击登录即可实现。
  6、网页内容提取
  我之前写过一篇,这个案例将InternetExplorer和正则表达结合在一起,提取目标网站的数据,感兴趣的同学可以参考。

网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭

网站优化优采云 发表了文章 • 0 个评论 • 206 次浏览 • 2022-06-16 12:47 • 来自相关话题

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  
  3.界面提示
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。

  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。

  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  
  四、示例代码的多种入口
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。

  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END 查看全部

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  
  3.界面提示
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。

  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。

  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  
  四、示例代码的多种入口
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。

  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END

数据获取,PQ就是这么任性!

网站优化优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2022-06-11 01:09 • 来自相关话题

  数据获取,PQ就是这么任性!
  
  PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源、任何结构、任何形式上获取数据
  
  数据的获取上不仅支持微软自己的数据格式,比如Excel、SQL Server、Access等;还支持SAP、Oracle、MySQL、DB2等几乎能见到的所有类型的数据格式,总有一种适合你;
  
  不仅能能从本地获取数据,还能从网页抓取数据。选择从Web获取数据,只要在弹出的URL窗口中输入网址,网页上的数据就可直接抓取到,用这种方法我们可以实时抓取股票涨跌、外汇牌价等等交易数据,现在我们尝试一下,比如从中国银行网站上抓取外汇牌价信息,先输入网址:

  点击确定以后,出现预览窗口,

  点击编辑,进入查询编辑器,
  
  外汇数据抓取完成,剩下的就是数据整理的过程了,而且这些抓取的信息可以随时刷新来更新数据的。这只是抓取外汇牌价的第一页,其实抓取多个页面数据也是可以的,等后面介绍过M函数以后再专门写一篇。
  以后再也不需要手动从网页上复制数据再粘贴到表格中了。
  其实每个人接触到的数据格式很有限,熟悉自己的数据类型知道如何导入到PowerBI以后,下一步就是进行数据处理的过程,这才是我们真正需要掌握的核心技巧。

  提升技能 开拓视野 查看全部

  数据获取,PQ就是这么任性!
  
  PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源、任何结构、任何形式上获取数据
  
  数据的获取上不仅支持微软自己的数据格式,比如Excel、SQL Server、Access等;还支持SAP、Oracle、MySQL、DB2等几乎能见到的所有类型的数据格式,总有一种适合你;
  
  不仅能能从本地获取数据,还能从网页抓取数据。选择从Web获取数据,只要在弹出的URL窗口中输入网址,网页上的数据就可直接抓取到,用这种方法我们可以实时抓取股票涨跌、外汇牌价等等交易数据,现在我们尝试一下,比如从中国银行网站上抓取外汇牌价信息,先输入网址:

  点击确定以后,出现预览窗口,

  点击编辑,进入查询编辑器,
  
  外汇数据抓取完成,剩下的就是数据整理的过程了,而且这些抓取的信息可以随时刷新来更新数据的。这只是抓取外汇牌价的第一页,其实抓取多个页面数据也是可以的,等后面介绍过M函数以后再专门写一篇。
  以后再也不需要手动从网页上复制数据再粘贴到表格中了。
  其实每个人接触到的数据格式很有限,熟悉自己的数据类型知道如何导入到PowerBI以后,下一步就是进行数据处理的过程,这才是我们真正需要掌握的核心技巧。

  提升技能 开拓视野

用Python获取银行网站上的存贷款利率表

网站优化优采云 发表了文章 • 0 个评论 • 346 次浏览 • 2022-06-05 10:27 • 来自相关话题

  用Python获取银行网站上的存贷款利率表
  项目背景
  最近在做一个利率市场化咨询的项目,主要是协助银行搭建定价体系,提供定价策略,在充分考虑产品差异、顾客需求差异、时间差异、地点差异等因素基础上制定不同的存贷款定价方法。
  在制定定价策略之前, 我们通常会分析客户所处的内外部的环境。外部环境分析可以分成宏观环境分析、行业环境分析等部分。 在行业分析(Industrial Analysis) 部分, 我们会确定客户的存贷款利率价格在业内处于什么样的水平。这就需要去采集各家银行的存贷款利率数据。
  
  然而Wind上没有相关的数据源可供下载。 这就需要不怕脏不怕累的小朋友们去百度搜索各家银行的网站,然后再用肉眼寻找躲在银行主页角落的“存贷款利率”的连接, 点击进入后将存贷款利率录入到Excel中。 这绝对是是对Junior耐心、眼力的一个考验... 这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。但是怎么才能让这种无聊的工作自动化呢 ?
  LifeIs Short,UsePython
  这时候我们就要引出 简单、易学、功能强大的编程语言 Python了。我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:
  
  需求分析
  在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。 我们当然也可以直接将数据直接也爬取下来存在Excel中, 但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。
  爬取过程
  首先, 我们先找到一个银行网址导航网站。我选取的是360导航页面 ():
  
  并查看源代码:
  
  可以看出, 银行网址都被放入了 a 这个标签中。 我们可以使用第三方库 BeautifulSoup 美丽汤对该标签进行下载。
  当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。 这时候我们就需要 正则表达式对于该标签下的链接进行筛选。经过观察, 大部分银行网站的标签名都以“银行”结尾, 所以我们使用
  " .银行 "
  作为筛选的正则。而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字, 所以我们使用:
  ”款利率. *"
  作为寻找存贷款利率链接的正则。
  下面是准备阶段的Python代码:
  #encoding:utf-8<br />import urllib2<br />import re<br />from bs4 import BeautifulSoup<br /><br />#建立列表储存url和对应的标签名<br />url = []<br />name= []<br />#建立集合, 将爬取过的页面放入,避免才重复<br />urlset =set("")<br />#用于筛选的正则表达式<br />source = ".银行"<br />temp = source.decode('utf8')<br />source2 = "款利率.*"<br />temp2 = source2.decode('utf8')<br />#导航网站作为我们爬取的根页面<br />response = urllib2.urlopen("http://hao.360.cn/yinhanggengduo.html")<br />html= response.read()<br />soup = BeautifulSoup(html,'html.parser')<br />#将满足条件的url和页面名称放入列表中<br />for tag in soup.find_all(name='a', text=re.compile(temp)):<br /> name.append(tag.string)<br /> url.append(tag.get('href'))<br />
  我们在获取好各大银行网站的url后, 我们需要进一步进入银行的存贷款利率信息表页面。但是经过进一步分析,我们发现,第二层的url一般都是短链接:
  
  无法直接使用,所以我们需要将短链接与域名进行拼接:
  #域名拼接<br />url2 = link + tag2.get('href')
  而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String, 通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
  if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />    url2 = tag2.get('href')
  并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。如果没有,则输出后加入urlset集合中:
  if url2 in urlset:<br /> continue<br />else:<br /> urlset.add(url2)
  Python输出部分代码:
  num = -1<br />for link in url:<br /> num = num + 1<br />    try:<br /> linkresponse = urllib2.urlopen(link)<br /> htmlpage = linkresponse.read()<br /> pagesoup = BeautifulSoup(htmlpage, 'html.parser')<br /> for tag2 in pagesoup.find_all(name='a', text=re.compile(temp2)):<br /> #得到银行名称<br />            bname = tag2.get_text()<br /> #得到页面名称<br />            href = str(tag2.get('href'))<br /> if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />                url2 = tag2.get('href')<br /> if url2 in urlset:<br /> #输出过, 跳出循环<br />                    continue<br />                else:<br /> #未输出过,放入集合<br />                    urlset.add(url2)<br /> else:<br /> #域名拼接<br />                url2 = link + tag2.get('href')<br /> if url2 in urlset:<br /> continue<br />                else:<br /> urlset.add(url2)<br /> print name[num]+" " + bname +" "+ url2<br /> except:<br /> pass<br /><br /><br /><br />
  运行结果
  我们在完成代码部分后,运行该部分Python脚本。
  
  查看输出:
  
  
  可以看出,我们需要的银行存贷款信息页面链接已经打印出来。 做咨询的小朋友们可以直接点击进入记录相关银行的存贷款利率了~
  最后,祝大家新年快乐~ 新的一年工作学习顺利~
   查看全部

  用Python获取银行网站上的存贷款利率表
  项目背景
  最近在做一个利率市场化咨询的项目,主要是协助银行搭建定价体系,提供定价策略,在充分考虑产品差异、顾客需求差异、时间差异、地点差异等因素基础上制定不同的存贷款定价方法。
  在制定定价策略之前, 我们通常会分析客户所处的内外部的环境。外部环境分析可以分成宏观环境分析、行业环境分析等部分。 在行业分析(Industrial Analysis) 部分, 我们会确定客户的存贷款利率价格在业内处于什么样的水平。这就需要去采集各家银行的存贷款利率数据。
  
  然而Wind上没有相关的数据源可供下载。 这就需要不怕脏不怕累的小朋友们去百度搜索各家银行的网站,然后再用肉眼寻找躲在银行主页角落的“存贷款利率”的连接, 点击进入后将存贷款利率录入到Excel中。 这绝对是是对Junior耐心、眼力的一个考验... 这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。但是怎么才能让这种无聊的工作自动化呢 ?
  LifeIs Short,UsePython
  这时候我们就要引出 简单、易学、功能强大的编程语言 Python了。我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:
  
  需求分析
  在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。 我们当然也可以直接将数据直接也爬取下来存在Excel中, 但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。
  爬取过程
  首先, 我们先找到一个银行网址导航网站。我选取的是360导航页面 ():
  
  并查看源代码:
  
  可以看出, 银行网址都被放入了 a 这个标签中。 我们可以使用第三方库 BeautifulSoup 美丽汤对该标签进行下载。
  当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。 这时候我们就需要 正则表达式对于该标签下的链接进行筛选。经过观察, 大部分银行网站的标签名都以“银行”结尾, 所以我们使用
  " .银行 "
  作为筛选的正则。而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字, 所以我们使用:
  ”款利率. *"
  作为寻找存贷款利率链接的正则。
  下面是准备阶段的Python代码:
  #encoding:utf-8<br />import urllib2<br />import re<br />from bs4 import BeautifulSoup<br /><br />#建立列表储存url和对应的标签名<br />url = []<br />name= []<br />#建立集合, 将爬取过的页面放入,避免才重复<br />urlset =set("")<br />#用于筛选的正则表达式<br />source = ".银行"<br />temp = source.decode('utf8')<br />source2 = "款利率.*"<br />temp2 = source2.decode('utf8')<br />#导航网站作为我们爬取的根页面<br />response = urllib2.urlopen("http://hao.360.cn/yinhanggengduo.html";)<br />html= response.read()<br />soup = BeautifulSoup(html,'html.parser')<br />#将满足条件的url和页面名称放入列表中<br />for tag in soup.find_all(name='a', text=re.compile(temp)):<br /> name.append(tag.string)<br /> url.append(tag.get('href'))<br />
  我们在获取好各大银行网站的url后, 我们需要进一步进入银行的存贷款利率信息表页面。但是经过进一步分析,我们发现,第二层的url一般都是短链接:
  
  无法直接使用,所以我们需要将短链接与域名进行拼接:
  #域名拼接<br />url2 = link + tag2.get('href')
  而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String, 通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
  if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />    url2 = tag2.get('href')
  并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。如果没有,则输出后加入urlset集合中:
  if url2 in urlset:<br /> continue<br />else:<br /> urlset.add(url2)
  Python输出部分代码:
  num = -1<br />for link in url:<br /> num = num + 1<br />    try:<br /> linkresponse = urllib2.urlopen(link)<br /> htmlpage = linkresponse.read()<br /> pagesoup = BeautifulSoup(htmlpage, 'html.parser')<br /> for tag2 in pagesoup.find_all(name='a', text=re.compile(temp2)):<br /> #得到银行名称<br />            bname = tag2.get_text()<br /> #得到页面名称<br />            href = str(tag2.get('href'))<br /> if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />                url2 = tag2.get('href')<br /> if url2 in urlset:<br /> #输出过, 跳出循环<br />                    continue<br />                else:<br /> #未输出过,放入集合<br />                    urlset.add(url2)<br /> else:<br /> #域名拼接<br />                url2 = link + tag2.get('href')<br /> if url2 in urlset:<br /> continue<br />                else:<br /> urlset.add(url2)<br /> print name[num]+" " + bname +" "+ url2<br /> except:<br /> pass<br /><br /><br /><br />
  运行结果
  我们在完成代码部分后,运行该部分Python脚本。
  
  查看输出:
  
  
  可以看出,我们需要的银行存贷款信息页面链接已经打印出来。 做咨询的小朋友们可以直接点击进入记录相关银行的存贷款利率了~
  最后,祝大家新年快乐~ 新的一年工作学习顺利~
  

使用rvest从COSMIC中获取突变表格

网站优化优采云 发表了文章 • 0 个评论 • 255 次浏览 • 2022-06-05 10:26 • 来自相关话题

  使用rvest从COSMIC中获取突变表格
  
  2022的实习生和学徒培养开始啦,所以大家又可以看到了几百个全新的生物信息学知识点整理分享的简书,公众号,语雀账号了。挑选其中一些持久的,优秀的小伙伴的笔记转载到我们《生信技能树》公众号平台:
  下面是因INFORnotes的分享了解网页
  在学习如何爬取网页之前,要了解网页本身的结构。
  用于构建网页的主要语言为 HTML,CSS和Javascript。HTML为网页提供了其实际结构和内容。CSS为网页提供了其样式和外观,包括字体和颜色等细节。Javascript提供了网页功能。在此,我们将主要关注如何使用R包来读取构成网页的 HTML 。
  HTML
  HTML为一种标记语言,它描述了网页的内容和结构。不同的标签执行不同的功能。许多标签一起形成并包含网页的内容。常见的HTML文档如下所示:
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><p><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a second paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /></p>
  每个标签都是"配对"的, 且允许标签彼此嵌套。这种嵌套为 HTML 提供了一个"树状"结构。这种树状结构将告知我们在使用R进行网络抓取时如何查找某些标签。
  使用rvest从COSMIC中获取突变表格
  安装并导入R包
  install.packages(“rvest”)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />library(rvest)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />
  为了开始解析一个网页,我们首先需要从包含它的计算机服务器请求数据。在revest中,使用read_html(),接受一个web URL作为参数。
  以TP53基因为例,在COSMIC网站中检索。在网页右上角点击使用开发人员工具找到URL。
  
  read_html() 函数返回一个列表对象,该对象包含前面讨论的树状结构。 <p>url 查看全部

  使用rvest从COSMIC中获取突变表格
  
  2022的实习生和学徒培养开始啦,所以大家又可以看到了几百个全新的生物信息学知识点整理分享的简书,公众号,语雀账号了。挑选其中一些持久的,优秀的小伙伴的笔记转载到我们《生信技能树》公众号平台:
  下面是因INFORnotes的分享了解网页
  在学习如何爬取网页之前,要了解网页本身的结构。
  用于构建网页的主要语言为 HTML,CSS和Javascript。HTML为网页提供了其实际结构和内容。CSS为网页提供了其样式和外观,包括字体和颜色等细节。Javascript提供了网页功能。在此,我们将主要关注如何使用R包来读取构成网页的 HTML 。
  HTML
  HTML为一种标记语言,它描述了网页的内容和结构。不同的标签执行不同的功能。许多标签一起形成并包含网页的内容。常见的HTML文档如下所示:
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><p><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a second paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /></p>
  每个标签都是"配对"的, 且允许标签彼此嵌套。这种嵌套为 HTML 提供了一个"树状"结构。这种树状结构将告知我们在使用R进行网络抓取时如何查找某些标签。
  使用rvest从COSMIC中获取突变表格
  安装并导入R包
  install.packages(“rvest”)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />library(rvest)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />
  为了开始解析一个网页,我们首先需要从包含它的计算机服务器请求数据。在revest中,使用read_html(),接受一个web URL作为参数。
  以TP53基因为例,在COSMIC网站中检索。在网页右上角点击使用开发人员工具找到URL。
  
  read_html() 函数返回一个列表对象,该对象包含前面讨论的树状结构。 <p>url

Python自动化办公——批量打开网页,从网页上下载文件到本地

网站优化优采云 发表了文章 • 0 个评论 • 144 次浏览 • 2022-08-28 02:20 • 来自相关话题

  Python自动化办公——批量打开网页,从网页上下载文件到本地
  “经过前几节内容的学习,我们已经掌握了如何对文件进行处理,那么接下来我们将学习下一个模块的内容——即获取网页上的信息。目前我们许多的工作都离不开互联网,比如上网检索相关文献,查找数据等。如果我们学会让程序自己就能够上网,并检索网页上的信息,提取出我们想要的信息,岂不是为我们节省了很多时间!接下来几节我们将学习利用Python抓取网页的几个模块,这一节我们将主要学习如何利用程序批量打开网页,以及从网页上下载文件到本地。”
  利用webbrowser批量打开网页
  假如你的上级让你将表格里的城市的天气统计出来,我们首先可以在网页上搜索相关城市的天气信息,观察其不同城市的网址:
  我们可以发现通过更改网址内的城市名称可以查看相应城市的天气信息。首先我们可以将表格内的城市信息提取出来:
  import xlrddata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) print(city)
  输出:
  ['上海', '苏州', '成都', '重庆', '杭州', '南京', '无锡', '长沙']
  接下来我们可以根据更改网址中的城市名称来利用webbrowser打开网页:
  import xlrd,webbrowserdata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给data.sheets()参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) for c in city: webbrowser.open('https://weathernew.pae.baidu.com/weathernew/pc?query='+c+'天气&srcid=4982')
  这样就可以自动将这些城市的天气信息打开了!
  利用requests从网页上下载文件并保存到本地
  
  Requests模块是常用的访问网页的工具,我们使用其get方法能够得到网页信息,我们这里以下载txt为例,get当中的网址我们通常称为url,这里的url为下载链接:
  import requestsres = requests.get('https://www.gutenberg.org/cache/epub/1112/pg1112.txt')type(res)
  输出:
  requests.models.Response
  其返回类型为response格式
  #是否下载成功res.status_code == requests.codes.OK
  如果返回True则表明下载成功
  我们可以查看下载的内容长度:
  len(res.text)
  输出:
  179380
  还可以将其部分字符打印出来:
  print(res.text[:200])
  
  输出:
  The Project Gutenberg EBook of Romeo andJuliet, by William Shakespeare<br /><br /><br /><br />*******************************************************************THIS EBOOK WAS ONE OF PROJECT GUTENBERG'SEARLY FILES
  上面判断是否下载成功仅以True/False的形式返回,如果我们想让下载失败返回一个错误提醒则可以使用res.raise_for_status(),其只有在下载失败时会给予错误提示,并终止运行。
  将文件下载到本地通常我们使用分块保存的操作:
  #下载到本地,逐块保存#以写入的模式新建输出文件out = open('output.txt','wb')#分段保存,这里每段需要指定包含多少字节,我们通常传入10万字节forlineinres.iter_content(100000): out.write(line)out.close()
  输出文件:
  这里iter_content的参数我们通常选用10万,这样我们可以将我们的文本文件分为两块(100000,79380)循环保存下来。
  既然已经学会了如何从网页上下载文件,那么相信这仅仅是个开始~大家可以发散思维自己动手试试~
  以上即为本次全部内容,写文不易,如果您觉得我们的推送对您很有帮助,您可以通过赞赏来给予我们超大鼓励!跪谢~
  END
  参考资料
  [1]Python编程快速上手:让繁琐工作自动化/(美)斯维加特(Al Sweigart)著;王海鹏译. -- 北京:人民邮电出版社,2016.7[2]xlrd · PyPI 查看全部

  Python自动化办公——批量打开网页,从网页上下载文件到本地
  “经过前几节内容的学习,我们已经掌握了如何对文件进行处理,那么接下来我们将学习下一个模块的内容——即获取网页上的信息。目前我们许多的工作都离不开互联网,比如上网检索相关文献,查找数据等。如果我们学会让程序自己就能够上网,并检索网页上的信息,提取出我们想要的信息,岂不是为我们节省了很多时间!接下来几节我们将学习利用Python抓取网页的几个模块,这一节我们将主要学习如何利用程序批量打开网页,以及从网页上下载文件到本地。”
  利用webbrowser批量打开网页
  假如你的上级让你将表格里的城市的天气统计出来,我们首先可以在网页上搜索相关城市的天气信息,观察其不同城市的网址:
  我们可以发现通过更改网址内的城市名称可以查看相应城市的天气信息。首先我们可以将表格内的城市信息提取出来:
  import xlrddata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) print(city)
  输出:
  ['上海', '苏州', '成都', '重庆', '杭州', '南京', '无锡', '长沙']
  接下来我们可以根据更改网址中的城市名称来利用webbrowser打开网页:
  import xlrd,webbrowserdata = xlrd.open_workbook('D:\\Others\\公众号推文\\Python\\自动化办公\\9-1.xlsx')#未给data.sheets()参数默认为excel中的第一个sheetfor i in data.sheets(): #获取第一列数据 city = i.col_values(0) for c in city: webbrowser.open('https://weathernew.pae.baidu.com/weathernew/pc?query='+c+'天气&srcid=4982')
  这样就可以自动将这些城市的天气信息打开了!
  利用requests从网页上下载文件并保存到本地
  
  Requests模块是常用的访问网页的工具,我们使用其get方法能够得到网页信息,我们这里以下载txt为例,get当中的网址我们通常称为url,这里的url为下载链接:
  import requestsres = requests.get('https://www.gutenberg.org/cache/epub/1112/pg1112.txt')type(res)
  输出:
  requests.models.Response
  其返回类型为response格式
  #是否下载成功res.status_code == requests.codes.OK
  如果返回True则表明下载成功
  我们可以查看下载的内容长度:
  len(res.text)
  输出:
  179380
  还可以将其部分字符打印出来:
  print(res.text[:200])
  
  输出:
  The Project Gutenberg EBook of Romeo andJuliet, by William Shakespeare<br /><br /><br /><br />*******************************************************************THIS EBOOK WAS ONE OF PROJECT GUTENBERG'SEARLY FILES
  上面判断是否下载成功仅以True/False的形式返回,如果我们想让下载失败返回一个错误提醒则可以使用res.raise_for_status(),其只有在下载失败时会给予错误提示,并终止运行。
  将文件下载到本地通常我们使用分块保存的操作:
  #下载到本地,逐块保存#以写入的模式新建输出文件out = open('output.txt','wb')#分段保存,这里每段需要指定包含多少字节,我们通常传入10万字节forlineinres.iter_content(100000): out.write(line)out.close()
  输出文件:
  这里iter_content的参数我们通常选用10万,这样我们可以将我们的文本文件分为两块(100000,79380)循环保存下来。
  既然已经学会了如何从网页上下载文件,那么相信这仅仅是个开始~大家可以发散思维自己动手试试~
  以上即为本次全部内容,写文不易,如果您觉得我们的推送对您很有帮助,您可以通过赞赏来给予我们超大鼓励!跪谢~
  END
  参考资料
  [1]Python编程快速上手:让繁琐工作自动化/(美)斯维加特(Al Sweigart)著;王海鹏译. -- 北京:人民邮电出版社,2016.7[2]xlrd · PyPI

网页爬虫简单学习

网站优化优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-08-16 10:01 • 来自相关话题

  网页爬虫简单学习
  最近因工作需求,需要使用爬虫去采集数据,下面介绍一下我用到过的 Beautiful Soup 库和 XPath。
  Beautiful Soup
  Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。官方解释如下:
  Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。
  Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:
  Tag:
  通俗点讲就是 HTML 中的一个个标签。
  NavigableString:
  获取标签内部的文字。
  
  BeautifulSoup:
  BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性。
  Comment:
  Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。我们找一个带注释的标签。
  lxml
  BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法。lxml 用法源自 lxml python 官方文档,更多内容请直接参阅官方文档。
  XPath 语法
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
  <br /><br /> Harry Potter<br /> J K. Rowling<br /> 2005<br /> 29.99<br /><br />
  这里就大致简单介绍一下,关于这两个库的用法在网上一搜即可。
  
  BeautifulSoup 是一个库,而 XPath 是一种技术,python 中最常用的 XPath 库是 lxml,这两者应该怎么取舍,可以根据实际情况和以下对比来决定。
  BeautifulSoup 和 lxml 的原理不一样,BeautifulSoup 是基于 DOM 的,会载入整个文档,解析整个 DOM 树,因此时间和内存开销都会大很多。而 lxml 只会局部遍历,另外 lxml 是用 C 写的,而 BeautifulSoup 是用 python 写的,因此性能方面自然会差很多。
  BeautifulSoup 用起来比较简单,API 非常人性化,支持 css 选择器。lxml 的 XPath 写起来麻烦,开发效率不如 BeautifulSoup。例如:
  title = soup.select('.content div.title h3')
  同样的代码用 Xpath 写起来会很麻烦:
  title=tree.xpath("//*[@class='content']/div[@class='content']/h3")
  如果在提取某个页面的某个标签的 xpath 路径的话,可以如下图:
  个人觉得 BeautifulSoup 与 xpath 相比,优势就是无需考虑文档结构。只需要找元素对应的 CSS 就可以。xpath 比较恶心人的地方就在于你要确保元素路径的准确,所以有的时候调试起来还是有点儿麻烦的。
  如果你要采集的图片、商品说明、价格、划线价格、备注等等都有不同的 CSS 属性,那 BeautifulSoup 用起来最舒服。当然,也包括小说网站等等,总之,你要采集的数据根据 CSS 有典型的规律性的,可以首选 BeautifulSoup。但如果一个页面有三个表格,而且表格中的文字和属性都有重复的。显然无法使用 CSS 属性或条件表达式将其区分开。那就只能用 xpath 了。
  而 xpath 可能遇到的是,浏览器渲染网页时会自动补全源码中缺少的标签,你在浏览器开发者工具中看到的源码和请求的源码不一定是一样的,你用开发者工具中的功能复制的路径也不一定是对的。比如有些网页的表格会不写tbody 标签,直接 th、tr、td。浏览器在渲染时会自动把 tbody 补全到源码里,但是你请求的源码里是没有的。 查看全部

  网页爬虫简单学习
  最近因工作需求,需要使用爬虫去采集数据,下面介绍一下我用到过的 Beautiful Soup 库和 XPath。
  Beautiful Soup
  Beautiful Soup 是 python 的一个库,最主要的功能是从网页抓取数据。官方解释如下:
  Beautiful Soup 提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 自动将输入文档转换为 Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup 已成为和 lxml、html6lib 一样出色的 python 解释器,为用户灵活地提供不同的解析策略或强劲的速度。
  Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种:
  Tag:
  通俗点讲就是 HTML 中的一个个标签。
  NavigableString:
  获取标签内部的文字。
  
  BeautifulSoup:
  BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称,以及属性。
  Comment:
  Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦。我们找一个带注释的标签。
  lxml
  BeautifulSoup 已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法。lxml 用法源自 lxml python 官方文档,更多内容请直接参阅官方文档。
  XPath 语法
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
  <br /><br /> Harry Potter<br /> J K. Rowling<br /> 2005<br /> 29.99<br /><br />
  这里就大致简单介绍一下,关于这两个库的用法在网上一搜即可。
  
  BeautifulSoup 是一个库,而 XPath 是一种技术,python 中最常用的 XPath 库是 lxml,这两者应该怎么取舍,可以根据实际情况和以下对比来决定。
  BeautifulSoup 和 lxml 的原理不一样,BeautifulSoup 是基于 DOM 的,会载入整个文档,解析整个 DOM 树,因此时间和内存开销都会大很多。而 lxml 只会局部遍历,另外 lxml 是用 C 写的,而 BeautifulSoup 是用 python 写的,因此性能方面自然会差很多。
  BeautifulSoup 用起来比较简单,API 非常人性化,支持 css 选择器。lxml 的 XPath 写起来麻烦,开发效率不如 BeautifulSoup。例如:
  title = soup.select('.content div.title h3')
  同样的代码用 Xpath 写起来会很麻烦:
  title=tree.xpath("//*[@class='content']/div[@class='content']/h3")
  如果在提取某个页面的某个标签的 xpath 路径的话,可以如下图:
  个人觉得 BeautifulSoup 与 xpath 相比,优势就是无需考虑文档结构。只需要找元素对应的 CSS 就可以。xpath 比较恶心人的地方就在于你要确保元素路径的准确,所以有的时候调试起来还是有点儿麻烦的。
  如果你要采集的图片、商品说明、价格、划线价格、备注等等都有不同的 CSS 属性,那 BeautifulSoup 用起来最舒服。当然,也包括小说网站等等,总之,你要采集的数据根据 CSS 有典型的规律性的,可以首选 BeautifulSoup。但如果一个页面有三个表格,而且表格中的文字和属性都有重复的。显然无法使用 CSS 属性或条件表达式将其区分开。那就只能用 xpath 了。
  而 xpath 可能遇到的是,浏览器渲染网页时会自动补全源码中缺少的标签,你在浏览器开发者工具中看到的源码和请求的源码不一定是一样的,你用开发者工具中的功能复制的路径也不一定是对的。比如有些网页的表格会不写tbody 标签,直接 th、tr、td。浏览器在渲染时会自动把 tbody 补全到源码里,但是你请求的源码里是没有的。

移动端网站,独立APP,网站排名策略!

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-07-27 01:25 • 来自相关话题

  移动端网站,独立APP,网站排名策略!
  今天有个小伙伴私信我,打算做一个时尚美妆类APP,百度SEO,目前对方是有一个移动站点。
  打算通过百度SEO,获取搜索流量,从而提升APP的下载量和用户增量。
  从搜索营销与百度SEO的角度,我们认为是可行的,但实操起来还是有诸多细节需要注意!
  如下图:
  这个是移动端产品内容页面,整体上来讲,还算是比较清新,没有过多的冗余性内容。
  那么,移动端网站,独立APP,网站排名策略有哪些?
  1、移动端SEO排名阻碍
  要让独立APP有效的获取移动端排名流量,首先应该做的是梳理独立APP做移动端SEO排名的阻碍有哪些:
  ① 页面标题个性化
  对于搜索引擎来说,要识别一个页面的内容,首先是抓取这个页面的标题标签,通过标题关键词来明确页面主题,再通过内容当中的各种因素来识别页面质量。
  而独立APP中大多内容并没有这么做,更多的是依靠信息流分发来满足用户标签化需求,但并不符合SEO策略。
  ② 内容缺少SEO属性
  同时页面中的内容也更倾向于新媒体样式,比如:不是按照SEO文章的段落区分,有的内容会按照句子来换行,有的会植入一些文字类图标代表文字意义。
  而搜索引擎是需要通过文字来识别内容的,就更不需要提关键词植入一类的SEO属性,这些问题对于独立APP单页面排名形成了天然性阻碍。
  ③ 页面信息流展现没有固定分类
  因独立APP的内容分发机制导致,APP中的内容没有固定的分类,一切都按照兴趣标签来划分内容分类。
  
  但对于做SEO来说,这些内容就需要重新进行分类,在移动端网站中可以更有效的满足用户需求,便利搜索引擎爬行与抓取。
  ④ 内容质量多元化
  一般独立APP内容都会有审核机制,但处于规模化处理的繁琐与必要性,会导致APP中的内容大部分只是规避了违禁词一类的审核,而关于内容质量多数是基于内容点赞、评论等数据来判断质量优劣。
  而对于搜索引擎来说,内容质量更多的是在于原创度、内容关键词布局、段落等一系列因素,所以,对于APP做移动端SEO来说,APP内容梳理是一个问题。
  如何区分与筛选优质内容,推送给搜索引擎显得格外重要。
  ⑤ 缺少合理内部链接
  做SEO对内链的依赖性很高,可以引导蜘蛛抓取其他页面,也可以提高当前页面的相关性等,而大部分APP内容并没有内链设置的必要,所以需要在移动网站中合理布局内链锚文本。
  ⑥ URL路径个性化
  对于APP来说,几乎可以忽略url一说,对于移动端网站来说,虽然搜索引擎也在削弱url样式对网站的影响,但一个简单明了,没有多余参数的url还是搜索引擎所喜爱的,我们需要对移动端网站的url进行重新规划,以符合搜索引擎的需求。
  2、移动端SEO,APP排名策略
  做好了独立APP做移动端网站SEO的阻碍研究后,我们就可以依照搜索引擎需要的标准,调整独立APP内容到移动端网站中,获取相关排名:
  ① 区分高质量原创内容
  从SEO的角度而言,我们在做APP数据推送(给搜索引擎)的时候,因为APP中的碎片化信息非常多。
  我们需要合理的筛选优质内容,建立高质量集合,在必要的情况下,可以让自身的运营,输出一部分高质量的内容。
  用于推送给搜索引擎,建立前期的搜索信任度。
  ② 规划设计话题标签
  我们知道APP中的内容是碎片化的,并且内容产出的样式,在某种程度上,我们没有办法进行标准化,大部分都是UGC内容,除非我们建立PGC体系,在这样的基础性,我们可以搭建SEO标准化的内容生产模型。
  这并不适用于海量数据的APP产出,因此,我们从SEO排名的角度,更多的是将排序策略,定位到话题标签中。
  
  精细化,每一个话题属性标签,也就是TAG标签。
  ③ 建立整站结构地图
  我们知道对于内容输出为主的APP来讲,我们想要试图让搜索引擎合理便利的爬行,除了要有良好的页面结构之外。
  在某种程度上,我们试图提高页面收录的时候,还需要建立网站地图,它可以快速的辅助搜索引擎爬行目标APP站点中的页面。
  这里面需要说明的是:
  需要注意的是内容多也不能做索引型网站地图,搜索引擎有明确规定,索引型网站地图不再进行识别,可以通过多个编号不同的xml形式网站地图进行提交。
  ④ 合理提交内容给百度
  我们知道最近搜索引擎对内容收录策略做了调整,很多网站收录效果并不好,所以我们做移动端网站内容提交需要有策略,比如按照一定分类进行提交,其中的页面相关性、内链链接有效性等都可以提高页面的初始排名权重。
  提交方式有多种,因为网站内容已经存在,所以批量提交是最好的方式,可以有效的以提交内容的数量来提升蜘蛛抓取频率,形成良性循环。
  而进行批量提交最好的方式是两种,一种是通过api提交,发布内容后提交,再一种是通过sitemap提交我们之前生成网站地图的一部分,也可以说是api提交的url汇总。
  ⑤ 建立反向链接
  谈论到做网站SEO,必然离不开反向链接,尤其是外链,不仅可以引导蜘蛛抓取页面内容同时还可以提高页面相关性,提升页面权重。
  我们建议批量有针对性的对排名页面做锚文本链接,锚文本链接以排名页面定位的关键词为准,具体的数量依据页面排名情况而定,可以做一个记录表格,通过表格来规划,外链资源的使用情况。
  其中,内链策略也是我们需要重点考量的一个行为指标。
  ⑥ 域名往往M端启用
  还有一个重要的问题,很多APP做搜索引擎推广,只是做移动端网站,所以域名往往会选择m. *** .com这种格式。
  虽然,目前没有PC端,我们非常清楚,搜索引擎对于一个网站抓取的策略,往往对www开头的站点具有天然敏感度。
  因此,在这方面我们建议,如果没有PC端也是可以使用www域名作为落地访问域名。
  总结:关于移动端网站,独立APP,网站排名策略有哪些的问题,仍然有诸多细节需要讨论,以上内容,仅供参考。 查看全部

  移动端网站,独立APP,网站排名策略!
  今天有个小伙伴私信我,打算做一个时尚美妆类APP,百度SEO,目前对方是有一个移动站点。
  打算通过百度SEO,获取搜索流量,从而提升APP的下载量和用户增量。
  从搜索营销与百度SEO的角度,我们认为是可行的,但实操起来还是有诸多细节需要注意!
  如下图:
  这个是移动端产品内容页面,整体上来讲,还算是比较清新,没有过多的冗余性内容。
  那么,移动端网站,独立APP,网站排名策略有哪些?
  1、移动端SEO排名阻碍
  要让独立APP有效的获取移动端排名流量,首先应该做的是梳理独立APP做移动端SEO排名的阻碍有哪些:
  ① 页面标题个性化
  对于搜索引擎来说,要识别一个页面的内容,首先是抓取这个页面的标题标签,通过标题关键词来明确页面主题,再通过内容当中的各种因素来识别页面质量。
  而独立APP中大多内容并没有这么做,更多的是依靠信息流分发来满足用户标签化需求,但并不符合SEO策略。
  ② 内容缺少SEO属性
  同时页面中的内容也更倾向于新媒体样式,比如:不是按照SEO文章的段落区分,有的内容会按照句子来换行,有的会植入一些文字类图标代表文字意义。
  而搜索引擎是需要通过文字来识别内容的,就更不需要提关键词植入一类的SEO属性,这些问题对于独立APP单页面排名形成了天然性阻碍。
  ③ 页面信息流展现没有固定分类
  因独立APP的内容分发机制导致,APP中的内容没有固定的分类,一切都按照兴趣标签来划分内容分类。
  
  但对于做SEO来说,这些内容就需要重新进行分类,在移动端网站中可以更有效的满足用户需求,便利搜索引擎爬行与抓取。
  ④ 内容质量多元化
  一般独立APP内容都会有审核机制,但处于规模化处理的繁琐与必要性,会导致APP中的内容大部分只是规避了违禁词一类的审核,而关于内容质量多数是基于内容点赞、评论等数据来判断质量优劣。
  而对于搜索引擎来说,内容质量更多的是在于原创度、内容关键词布局、段落等一系列因素,所以,对于APP做移动端SEO来说,APP内容梳理是一个问题。
  如何区分与筛选优质内容,推送给搜索引擎显得格外重要。
  ⑤ 缺少合理内部链接
  做SEO对内链的依赖性很高,可以引导蜘蛛抓取其他页面,也可以提高当前页面的相关性等,而大部分APP内容并没有内链设置的必要,所以需要在移动网站中合理布局内链锚文本。
  ⑥ URL路径个性化
  对于APP来说,几乎可以忽略url一说,对于移动端网站来说,虽然搜索引擎也在削弱url样式对网站的影响,但一个简单明了,没有多余参数的url还是搜索引擎所喜爱的,我们需要对移动端网站的url进行重新规划,以符合搜索引擎的需求。
  2、移动端SEO,APP排名策略
  做好了独立APP做移动端网站SEO的阻碍研究后,我们就可以依照搜索引擎需要的标准,调整独立APP内容到移动端网站中,获取相关排名:
  ① 区分高质量原创内容
  从SEO的角度而言,我们在做APP数据推送(给搜索引擎)的时候,因为APP中的碎片化信息非常多。
  我们需要合理的筛选优质内容,建立高质量集合,在必要的情况下,可以让自身的运营,输出一部分高质量的内容。
  用于推送给搜索引擎,建立前期的搜索信任度。
  ② 规划设计话题标签
  我们知道APP中的内容是碎片化的,并且内容产出的样式,在某种程度上,我们没有办法进行标准化,大部分都是UGC内容,除非我们建立PGC体系,在这样的基础性,我们可以搭建SEO标准化的内容生产模型。
  这并不适用于海量数据的APP产出,因此,我们从SEO排名的角度,更多的是将排序策略,定位到话题标签中。
  
  精细化,每一个话题属性标签,也就是TAG标签。
  ③ 建立整站结构地图
  我们知道对于内容输出为主的APP来讲,我们想要试图让搜索引擎合理便利的爬行,除了要有良好的页面结构之外。
  在某种程度上,我们试图提高页面收录的时候,还需要建立网站地图,它可以快速的辅助搜索引擎爬行目标APP站点中的页面。
  这里面需要说明的是:
  需要注意的是内容多也不能做索引型网站地图,搜索引擎有明确规定,索引型网站地图不再进行识别,可以通过多个编号不同的xml形式网站地图进行提交。
  ④ 合理提交内容给百度
  我们知道最近搜索引擎对内容收录策略做了调整,很多网站收录效果并不好,所以我们做移动端网站内容提交需要有策略,比如按照一定分类进行提交,其中的页面相关性、内链链接有效性等都可以提高页面的初始排名权重。
  提交方式有多种,因为网站内容已经存在,所以批量提交是最好的方式,可以有效的以提交内容的数量来提升蜘蛛抓取频率,形成良性循环。
  而进行批量提交最好的方式是两种,一种是通过api提交,发布内容后提交,再一种是通过sitemap提交我们之前生成网站地图的一部分,也可以说是api提交的url汇总。
  ⑤ 建立反向链接
  谈论到做网站SEO,必然离不开反向链接,尤其是外链,不仅可以引导蜘蛛抓取页面内容同时还可以提高页面相关性,提升页面权重。
  我们建议批量有针对性的对排名页面做锚文本链接,锚文本链接以排名页面定位的关键词为准,具体的数量依据页面排名情况而定,可以做一个记录表格,通过表格来规划,外链资源的使用情况。
  其中,内链策略也是我们需要重点考量的一个行为指标。
  ⑥ 域名往往M端启用
  还有一个重要的问题,很多APP做搜索引擎推广,只是做移动端网站,所以域名往往会选择m. *** .com这种格式。
  虽然,目前没有PC端,我们非常清楚,搜索引擎对于一个网站抓取的策略,往往对www开头的站点具有天然敏感度。
  因此,在这方面我们建议,如果没有PC端也是可以使用www域名作为落地访问域名。
  总结:关于移动端网站,独立APP,网站排名策略有哪些的问题,仍然有诸多细节需要讨论,以上内容,仅供参考。

网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭

网站优化优采云 发表了文章 • 0 个评论 • 121 次浏览 • 2022-07-23 23:48 • 来自相关话题

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  3.界面提示
  
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。
  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。
  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  四、示例代码的多种入口
  
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。
  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END 查看全部

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  3.界面提示
  
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。
  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。
  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  四、示例代码的多种入口
  
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。
  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END

网页表格抓取 学校企业网站建设费用(学校网站搭建)

网站优化优采云 发表了文章 • 0 个评论 • 90 次浏览 • 2022-07-23 23:48 • 来自相关话题

  网页表格抓取 学校企业网站建设费用(学校网站搭建)
  学校企业网站建设费用(学校网站搭建)
  █百度排名联系排名大神【QQ/V:897569356】【╇飞机libing8899】专业网站搭建,网站搭建设计,系统程序开发,各种网站和小程序都可以做,H5平台制作-采票OA信用盘时间盘打赏台-APP制作,网站三端开发.专业搭建制作公司,一条龙搭建
  现在大家都爱拍短视频去分享,去吸引粉丝,抖音更是成为了短视频的新风口,而在新风口中能成为爆款的短视频就需要具备三个维度!
  
  第文章的标准是什么,这类文章又被称为seo文,它的要求可以说低到人们不敢相信,但是每天的需求量很大,有一定的写作规则,一个小网站每天就需要两篇以上的文章,要求没有错别字,完整,通顺,流畅,这是较高标准,几乎任何有文字能力的人都可以轻易达到。关键词优化需要一定的写作技巧,却没有什么艺术性的需求,文章撰写完成之后要通过一定的技术手段检测。
  抖音平台每天的人流量非常大,基本上只要你这个视频做的好几百上千的播放量是完全没有问题的,因此导致很多人来到抖音上引流导致竞争压力大,如果你没有很好的作品吸引眼球用不了多长时间人气就会迅速减少,也会造成作品流量少,甚至会出现没有流量的情况出现。
  在拍摄前期要准备好食材,确保食材品相质量过关,在镜头下要保证颜色鲜艳,新鲜干净卫生。另外考虑到拍摄过程与时间的矛盾,食材要多备一些,尤其是冰激凌之类的食物,拿出来没多久就会变形变色的食材,尽量多备,以备不时之需。
  跟踪网页链接是搜索引擎蜘蛛发现新网址的最基本方法。搜网站seo顾问索引擎蜘蛛抓取的页面文件与用户浏览器得到的完全一样,抓取的文件存入数据库。建立索引搜索引擎索引程序把蜘蛛抓取的网页文件分湘潭网站优化解、分析,并以巨大表格的形式存入数据库,这个过程就是索引。
  
  每个企业在行业中的地位,目标受众,行业情况的不同,所需要采用的SEO优化的方式和步骤哦也就因人而异,这是因素的不同在很大程度上影响着SEO的策略。
  最后,在文案调色盘方面, 橙色的文案主要是针对产品的功能/特点进行说明,而紫色则是诱惑式效果呈现,这两种颜色建议大家可以按需要使用,其中颜色比例没有固定的,非常鼓励大家自主创新,能产出更多好的创意。
  开头三要素,一篇文章下来提高百度关键词排名第莱州网络公司一要出现的就是title、keywords和deion这三个内容,这个相信大部分的站长都会了。现在有很多站长把关键词和描述标签删除,这个也是可以,但是如果你去做了填写了,那将会更好,在描述标签里出现一到两次关键词,对排名是非常有帮助的。 查看全部

  网页表格抓取 学校企业网站建设费用(学校网站搭建)
  学校企业网站建设费用(学校网站搭建)
  █百度排名联系排名大神【QQ/V:897569356】【╇飞机libing8899】专业网站搭建,网站搭建设计,系统程序开发,各种网站和小程序都可以做,H5平台制作-采票OA信用盘时间盘打赏台-APP制作,网站三端开发.专业搭建制作公司,一条龙搭建
  现在大家都爱拍短视频去分享,去吸引粉丝,抖音更是成为了短视频的新风口,而在新风口中能成为爆款的短视频就需要具备三个维度!
  
  第文章的标准是什么,这类文章又被称为seo文,它的要求可以说低到人们不敢相信,但是每天的需求量很大,有一定的写作规则,一个小网站每天就需要两篇以上的文章,要求没有错别字,完整,通顺,流畅,这是较高标准,几乎任何有文字能力的人都可以轻易达到。关键词优化需要一定的写作技巧,却没有什么艺术性的需求,文章撰写完成之后要通过一定的技术手段检测。
  抖音平台每天的人流量非常大,基本上只要你这个视频做的好几百上千的播放量是完全没有问题的,因此导致很多人来到抖音上引流导致竞争压力大,如果你没有很好的作品吸引眼球用不了多长时间人气就会迅速减少,也会造成作品流量少,甚至会出现没有流量的情况出现。
  在拍摄前期要准备好食材,确保食材品相质量过关,在镜头下要保证颜色鲜艳,新鲜干净卫生。另外考虑到拍摄过程与时间的矛盾,食材要多备一些,尤其是冰激凌之类的食物,拿出来没多久就会变形变色的食材,尽量多备,以备不时之需。
  跟踪网页链接是搜索引擎蜘蛛发现新网址的最基本方法。搜网站seo顾问索引擎蜘蛛抓取的页面文件与用户浏览器得到的完全一样,抓取的文件存入数据库。建立索引搜索引擎索引程序把蜘蛛抓取的网页文件分湘潭网站优化解、分析,并以巨大表格的形式存入数据库,这个过程就是索引。
  
  每个企业在行业中的地位,目标受众,行业情况的不同,所需要采用的SEO优化的方式和步骤哦也就因人而异,这是因素的不同在很大程度上影响着SEO的策略。
  最后,在文案调色盘方面, 橙色的文案主要是针对产品的功能/特点进行说明,而紫色则是诱惑式效果呈现,这两种颜色建议大家可以按需要使用,其中颜色比例没有固定的,非常鼓励大家自主创新,能产出更多好的创意。
  开头三要素,一篇文章下来提高百度关键词排名第莱州网络公司一要出现的就是title、keywords和deion这三个内容,这个相信大部分的站长都会了。现在有很多站长把关键词和描述标签删除,这个也是可以,但是如果你去做了填写了,那将会更好,在描述标签里出现一到两次关键词,对排名是非常有帮助的。

Pandas可以直接读取网页html(表格)、json、csv等格式

网站优化优采云 发表了文章 • 0 个评论 • 151 次浏览 • 2022-07-22 06:48 • 来自相关话题

  Pandas可以直接读取网页html(表格)、json、csv等格式
  点击上方“Python爬虫与数据挖掘”,进行关注
  回复“书籍”即可获赠Python从入门到进阶共10本电子书
  今
  日
  鸡
  汤
  五更疏欲断,一树碧无情。
  大家好,我是Python进阶者。
  一、前言
  前几天在Python白银交流群【Ming】问了一道Pandas处理html的问题,如下图所示。
  
  其实也不是问,算交流。
  确实,Pandas可以直接读取html,而且在网页读取的时候更加方便。
  二、实现过程
  这里大家一起讨论,学习了Pandas直接读取html的方法。
  后来【null】给了一个示例代码,及时雨。
  简单的三句代码就扒下来网页数据了,并且存表格,针对表格形式的网页,再也不用挨个tr、td标签去取了,直接Pandas梭哈。
  
  后来发现哥几个竟然是湖北公安老乡,彼此聊得火热。老乡见老乡,一起学习更香!后来【null】多做了拓展,爬ajax加载的json格式,也可以用Pandas来实现,这里也给出了示例。
  得到的结果如下图所示:
  后来【月神】也给出了拓展,抓取csv格式也是可以的。
  不得不承认,Pandas实在是太强大了!
  三、总结
  大家好,我是皮皮。这篇文章主要盘点了一道Pandas处理网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
  最后感谢粉丝【Ming】提问,感谢【null】、【月神】给出的思路和代码解析,感谢【空翼】、【dcpeng】、【此类生物】、【unswervingly】、【瑜亮老师】、【×_×】、【猫药师Kelly】、【冫马讠成】等人参与学习交流。
  小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
  -------------------End------------------- 查看全部

  Pandas可以直接读取网页html(表格)、json、csv等格式
  点击上方“Python爬虫与数据挖掘”,进行关注
  回复“书籍”即可获赠Python从入门到进阶共10本电子书
  今
  日
  鸡
  汤
  五更疏欲断,一树碧无情。
  大家好,我是Python进阶者。
  一、前言
  前几天在Python白银交流群【Ming】问了一道Pandas处理html的问题,如下图所示。
  
  其实也不是问,算交流。
  确实,Pandas可以直接读取html,而且在网页读取的时候更加方便。
  二、实现过程
  这里大家一起讨论,学习了Pandas直接读取html的方法。
  后来【null】给了一个示例代码,及时雨。
  简单的三句代码就扒下来网页数据了,并且存表格,针对表格形式的网页,再也不用挨个tr、td标签去取了,直接Pandas梭哈。
  
  后来发现哥几个竟然是湖北公安老乡,彼此聊得火热。老乡见老乡,一起学习更香!后来【null】多做了拓展,爬ajax加载的json格式,也可以用Pandas来实现,这里也给出了示例。
  得到的结果如下图所示:
  后来【月神】也给出了拓展,抓取csv格式也是可以的。
  不得不承认,Pandas实在是太强大了!
  三、总结
  大家好,我是皮皮。这篇文章主要盘点了一道Pandas处理网络爬虫的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
  最后感谢粉丝【Ming】提问,感谢【null】、【月神】给出的思路和代码解析,感谢【空翼】、【dcpeng】、【此类生物】、【unswervingly】、【瑜亮老师】、【×_×】、【猫药师Kelly】、【冫马讠成】等人参与学习交流。
  小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
  -------------------End-------------------

阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!

网站优化优采云 发表了文章 • 0 个评论 • 136 次浏览 • 2022-07-22 02:33 • 来自相关话题

  阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!
  最近不少小伙伴问我们,人民日报、央视新闻的这类图表应该怎么做?
  ▲「南丁格尔玫瑰图」
  如果能在 Excel 或者 PPT 中,也用这类图表进行汇报,数据呈现是不是比较直观呢?
  然而新闻中的图片往往是 PS 等专业设计工具做出来的,且不说没有这个技术,日常工作中投入图表美化的时间也没那么多呀……
  我们专门薅来了 7 个在线制作图表的网站,还有 6 个图表灵感网站,今天就一口气分享给大家!
  有了这些网站,不需要多高深的技术,也不用花太长时间,分分钟让小白都能做出超好看的图表~
  文末有网站合集链接获取方式,记得看到最后哦!
  炫酷大屏轻松搞定
  ▋DataV收费情况:免费试用期 3 天推荐指数:★★★☆☆
  DataV 是阿里云出品的在线可视化工具,可以将超多数据,放在一块大屏上!
  还记得每年双十一、双十二的直播大屏吗?
  「什么?这样的效果,用一个小网站就能做出来?」
  首先进入阿里云网站,注册登录,找到 DataV。
  然后就能看到一堆早早准备好的图表模板,数量太多,选都选不过来!
  当然我们也可以新建空白模板,自由创作~
  这里我们随便选一个【金融投资产品转化购买看板】的模板,打开是科技感十足的编辑页面,可以看到 DataV 的编辑功能非常丰富!
  重点是,功能区、操作都用中文标得清清楚楚,对小白来说,比 Excel 里各种函数公式要友好多啦!
  当我们在左侧选中某一具体板块后,可以调出右侧的设置区域,详细调整各种参数,包括颜色、位置、数据来源等。
  等等……刚刚还夸你对小白友好,怎么出现了代码??
  
  不要慌!在 Data V 中,修改数据的方式主要有两种:
  直接动手修改代码;或者上传 CSV 等格式的文件,自动识别数据。
  需要注意的是,原始表格中的表头仍需改成相应的名称,如上图中的「x、y、s、z」等,而且不同图表的匹配字段可能会不一样,需要一一对应。
  更多使用方法,大家可以查看官方教程哦:❶ DataV 设计实操培训:❷ DataV 数据加工培训:
  话说回来,阿里出品当然好,但有没有操作更简单的呢?
  ▋网易有数收费情况:免费试用期 15 天推荐指数:★★★☆☆
  网易有数的特点是,编辑页面自由度非常高,页面操作也容易理解。
  新手教程只有三步:❶ 插入图表;❷ 分别将数据拖入 X 轴、Y 轴;❸ 尝试使用智能图表。
  在网易有数,你可以把所有元素分图层来编辑,就像 PS、PPT 的选择窗格一样,因此可以轻松完成炫酷的大屏!
  官方教程指路:
  ▋百度 Sugar收费情况:试用期 31 天推荐指数:★★★☆☆
  除了阿里和网易,百度也有自己的数据可视化网站!
  百度 Sugar,目的是解决报表和大屏的数据可视化问题,解放数据可视化系统的开发人力。
  因此生成报表后,可以直接发送到录入好的邮箱列表中~
  在百度 Sugar,除了可以直接套用各类行业的大屏模板之外,还可以套用移动端的模板。
  如果不使用模板,也可以进入自由编辑页面,自由插入你想要的图标类型,根据自己的需求制作大屏,或者单个图表。
  官方教程指路:▋镝(di)数收费情况:可免费使用推荐指数:★★★★★
  大多数工具需要自己准备数据,而镝数直接提供了找数据的工具!在镝数的「找数据」页面,可以找到各种来源的数据,也可以导入 Excel 格式。
  如果想要收集问卷调查数据,常用的问卷调查工具有金数据、问卷星等, 金数据会将结果自动生成柱状图或条形图。
  解决数据源问题后,镝数同样也提供了许多模板,但镝数为模板做了更细致的分类!文章开头提到的「南丁格尔玫瑰图」在这里也可以找到~
  
  除了常规的图表编辑以外,还可以选择一个含有数据图表的长图模板。做图和做图表同时进行,又可以提早下班了~
  不过日常工作中,往往用不到这些大屏、复杂的图表,一些简单的单个图表,就能满足我们的需求啦~
  单个图表也能花样百出
  ▋板板简报收费情况:可免费使用推荐指数:★★★★★腾讯出品的板板简报,更有利于社交传播。板板简报的主要优势在于,不管是数据简报,还是数据大屏,都是动态的,可以通过链接或二维码分享出去。而且,目前所有模板都是免费的!i 了 i 了~
  在板板简报的编辑页面,各种图表、组件和模板都可以自由添加,也能一键设置尺寸和水印,特别方便!
  下面这个图表,就是我套用板板简报的模板做出来的~
  ▲ 上下滑动查看
  整体来说,板板简报操作方便,做出来的长图图表颜值也很高!▋花火 hanabi收费情况:可免费使用推荐指数:★★★☆☆
  花火更适合制作单个静态/动态图表,目前模板数是 50+,还在持续更新中!和板板简报一样,花火免费提供所有图表,还可以在设置里选择去除水印哦~
  选好模板,进入编辑页面,上方有三种常见的 PPT 比例可供选择,如果是动态图表,还可以选择播放按钮观察动态效果~
  手绘风图表成品示例:
  操作上,直接双击就能进入编辑状态,也可上传 xlsx、csv、xls 等格式的文件自动导入。
  花火的制作公司除了有花火可视化工具外,还有 EVA 公司财务可视分析工具,感兴趣的同学可以自行了解更多信息~
  ▋图表秀收费情况:部分图表可免费使用推荐指数:★★★☆☆
  另一个适合制作单个图表的网站是图表秀。图表秀的图表类型总共近一百种,但是约一半图表需要成为会员后才能使用。如果不想开通会员,也可单个图表购买~玫瑰图用图表秀也可以做出来哦!
  图表秀的编辑页面很友好,不管是编辑数据还是修改属性,一眼就能看明白,编辑完成后可导出 PNG 或 GIF。
  PS:导出透明背景 PNG 及 GIF 需要付费~
  ▲编辑数据及修改属性 查看全部

  阿里、腾讯、百度…这些大厂出品的13个网站,点点鼠标就能做炫酷图表!
  最近不少小伙伴问我们,人民日报、央视新闻的这类图表应该怎么做?
  ▲「南丁格尔玫瑰图」
  如果能在 Excel 或者 PPT 中,也用这类图表进行汇报,数据呈现是不是比较直观呢?
  然而新闻中的图片往往是 PS 等专业设计工具做出来的,且不说没有这个技术,日常工作中投入图表美化的时间也没那么多呀……
  我们专门薅来了 7 个在线制作图表的网站,还有 6 个图表灵感网站,今天就一口气分享给大家!
  有了这些网站,不需要多高深的技术,也不用花太长时间,分分钟让小白都能做出超好看的图表~
  文末有网站合集链接获取方式,记得看到最后哦!
  炫酷大屏轻松搞定
  ▋DataV收费情况:免费试用期 3 天推荐指数:★★★☆☆
  DataV 是阿里云出品的在线可视化工具,可以将超多数据,放在一块大屏上!
  还记得每年双十一、双十二的直播大屏吗?
  「什么?这样的效果,用一个小网站就能做出来?」
  首先进入阿里云网站,注册登录,找到 DataV。
  然后就能看到一堆早早准备好的图表模板,数量太多,选都选不过来!
  当然我们也可以新建空白模板,自由创作~
  这里我们随便选一个【金融投资产品转化购买看板】的模板,打开是科技感十足的编辑页面,可以看到 DataV 的编辑功能非常丰富!
  重点是,功能区、操作都用中文标得清清楚楚,对小白来说,比 Excel 里各种函数公式要友好多啦!
  当我们在左侧选中某一具体板块后,可以调出右侧的设置区域,详细调整各种参数,包括颜色、位置、数据来源等。
  等等……刚刚还夸你对小白友好,怎么出现了代码??
  
  不要慌!在 Data V 中,修改数据的方式主要有两种:
  直接动手修改代码;或者上传 CSV 等格式的文件,自动识别数据。
  需要注意的是,原始表格中的表头仍需改成相应的名称,如上图中的「x、y、s、z」等,而且不同图表的匹配字段可能会不一样,需要一一对应。
  更多使用方法,大家可以查看官方教程哦:❶ DataV 设计实操培训:❷ DataV 数据加工培训:
  话说回来,阿里出品当然好,但有没有操作更简单的呢?
  ▋网易有数收费情况:免费试用期 15 天推荐指数:★★★☆☆
  网易有数的特点是,编辑页面自由度非常高,页面操作也容易理解。
  新手教程只有三步:❶ 插入图表;❷ 分别将数据拖入 X 轴、Y 轴;❸ 尝试使用智能图表。
  在网易有数,你可以把所有元素分图层来编辑,就像 PS、PPT 的选择窗格一样,因此可以轻松完成炫酷的大屏!
  官方教程指路:
  ▋百度 Sugar收费情况:试用期 31 天推荐指数:★★★☆☆
  除了阿里和网易,百度也有自己的数据可视化网站!
  百度 Sugar,目的是解决报表和大屏的数据可视化问题,解放数据可视化系统的开发人力。
  因此生成报表后,可以直接发送到录入好的邮箱列表中~
  在百度 Sugar,除了可以直接套用各类行业的大屏模板之外,还可以套用移动端的模板。
  如果不使用模板,也可以进入自由编辑页面,自由插入你想要的图标类型,根据自己的需求制作大屏,或者单个图表。
  官方教程指路:▋镝(di)数收费情况:可免费使用推荐指数:★★★★★
  大多数工具需要自己准备数据,而镝数直接提供了找数据的工具!在镝数的「找数据」页面,可以找到各种来源的数据,也可以导入 Excel 格式。
  如果想要收集问卷调查数据,常用的问卷调查工具有金数据、问卷星等, 金数据会将结果自动生成柱状图或条形图。
  解决数据源问题后,镝数同样也提供了许多模板,但镝数为模板做了更细致的分类!文章开头提到的「南丁格尔玫瑰图」在这里也可以找到~
  
  除了常规的图表编辑以外,还可以选择一个含有数据图表的长图模板。做图和做图表同时进行,又可以提早下班了~
  不过日常工作中,往往用不到这些大屏、复杂的图表,一些简单的单个图表,就能满足我们的需求啦~
  单个图表也能花样百出
  ▋板板简报收费情况:可免费使用推荐指数:★★★★★腾讯出品的板板简报,更有利于社交传播。板板简报的主要优势在于,不管是数据简报,还是数据大屏,都是动态的,可以通过链接或二维码分享出去。而且,目前所有模板都是免费的!i 了 i 了~
  在板板简报的编辑页面,各种图表、组件和模板都可以自由添加,也能一键设置尺寸和水印,特别方便!
  下面这个图表,就是我套用板板简报的模板做出来的~
  ▲ 上下滑动查看
  整体来说,板板简报操作方便,做出来的长图图表颜值也很高!▋花火 hanabi收费情况:可免费使用推荐指数:★★★☆☆
  花火更适合制作单个静态/动态图表,目前模板数是 50+,还在持续更新中!和板板简报一样,花火免费提供所有图表,还可以在设置里选择去除水印哦~
  选好模板,进入编辑页面,上方有三种常见的 PPT 比例可供选择,如果是动态图表,还可以选择播放按钮观察动态效果~
  手绘风图表成品示例:
  操作上,直接双击就能进入编辑状态,也可上传 xlsx、csv、xls 等格式的文件自动导入。
  花火的制作公司除了有花火可视化工具外,还有 EVA 公司财务可视分析工具,感兴趣的同学可以自行了解更多信息~
  ▋图表秀收费情况:部分图表可免费使用推荐指数:★★★☆☆
  另一个适合制作单个图表的网站是图表秀。图表秀的图表类型总共近一百种,但是约一半图表需要成为会员后才能使用。如果不想开通会员,也可单个图表购买~玫瑰图用图表秀也可以做出来哦!
  图表秀的编辑页面很友好,不管是编辑数据还是修改属性,一眼就能看明白,编辑完成后可导出 PNG 或 GIF。
  PS:导出透明背景 PNG 及 GIF 需要付费~
  ▲编辑数据及修改属性

简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据

网站优化优采云 发表了文章 • 0 个评论 • 112 次浏览 • 2022-07-17 03:56 • 来自相关话题

  简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据
  今天我们讲讲如何抓取网页表格里的数据。首先我们分析一下,网页里的经典表格是怎么构成的。
  经典表格就这些知识点,没了。下面我们写个简单的表格 Web Scraper 爬虫。
  1.制作 Sitemap
  我们今天的练手网站是
  %C9%CF%BA%A3&txtDaoDa=%B1%B1%BE%A9
  爬虫的内容是抓取上海到北京的所有列车时刻表。
  我们先创建一个包含整个表格的 container,Type 类型选为 Table,表示我们要抓取表格。
  具体的参数如上图所示,因为比较简单,就不多说了。
  在这个面板下向下翻,会发现多了一个不一样的面板。观察一下你就会发现,这些数据其实就是表格数据类型的分类,在这个案例里,他把车次、出发站、开车时间等分类都列了出来。
  在 Table columns 这个分类里,每一行的内容旁边的选择按钮默认都是打勾的,也就是说默认都会抓取这些列的内容。如果你不想抓取某类内容,去掉对应的勾选就可以了。
  在你点击 Save selector 的按钮时,会发现 Result key 的一些选项报错,说什么 invalid format 格式无效:
  解决这个报错很简单,一般来说是 Result key 名字的长度不够,你给加个空格加个标点符号就行。如果还报错,就试试换成英文名字:
  解决报错保存成功后,我们就可以按照 Web Scraper 的爬取套路抓取数据了。
  2.为什么我不建议你用 Web Scraper 的 Table Selector?
  如果你按照刚刚的教程做下里,就会感觉很顺利,但是查看数据时就会傻眼了。
  刚开始抓取时,我们先用 Data preview 预览一下数据,会发现数据很完美:
  抓取数据后,在浏览器的预览面板预览,会发现车次这一列数据为 null,意味着没有抓取到相关内容:
  我们下载抓取的 CSV 文件后,在预览器里打开,会发现车次的数据出现了,但出发站的数据又为 null 了!
  这不是坑爹呢!
  关于这个问题我调查了半天,应该是 Web Scraper 对中文关键字索引的支持不太友好,所以会抛出一些诡异的 bug,因此我并不建议大家用它的 Table 功能。
  
  如果真的想抓取表格数据,我们可以用之前的方案,先创建一个类型为 Element 的 container,然后在 container 里再手动创建子选择器,这样就可以规避这个问题。
  上面只是一个原因,还有一个原因是,在现代网站,很少有人用 HTML 原始表格了。
  HTML 提供了表格的基础标签,比如说 、 、 等标签,这些标签上提供了默认的样式。好处是在互联网刚刚发展起来时,可以提供开箱即用的表格;缺点是样式太单一,不太好定制,后来很多网站用其它标签模拟表格,就像 PPT里用各种大小方块组合出一个表格一样,方便定制:
  出于这个原因,当你在用 Table Selector 匹配一个表格时,可能会死活匹配不上,因为从 Web Scraper 的角度考虑,你看到的那个表格就是个高仿,根本不是原装正品,自然是不认的。
  3.总结
  我们并不建议直接使用 Web Scraper 的 Table Selector,因为对中文支持不太友好,也不太好匹配现代网页。如果有抓取表格的需求,可以用之前的创建父子选择器的方法来做。
  前面几篇文章我们介绍了 Web Scraper 应对各种翻页的解决方法,比如说、和。今天我们说说一种更常见的翻页类型——分页器。
  本来想解释一下啥叫分页器,翻了一堆定义觉得很繁琐,大家也不是第一年上网了,看张图就知道了。我找了个功能最全的例子,支持数字页码调整,上一页下一页和指定页数跳转。
  今天我们就学学,Web Scraper 怎么对付这种类型的网页翻页。
  其实我们在本教程的第一个例子,中,豆瓣的这个电影榜单就是用分页器分割数据的:
  但当时我们是找网页链接规律抓取的,没有利用分页器去抓取。因为当一个网页的链接变化规律时,控制链接参数抓取是实现成本最低的;如果这个网页可以翻页,但是链接的变化不是规律的,就得去会一会这个分页器了。
  说这些理论有些枯燥,我们举个翻页链接不规律的例子。
  8 月 2 日是蔡徐坤的生日,为了表达庆祝,在微博上粉丝们给坤坤刷了 300W 的转发量,微博的转发数据正好是用分页器分割的,我们就分析一下微博的转发信息页面,看看这类数据怎么用 Web Scraper 抓取。
  这条微博的直达链接是:
  看了他那么多的视频,为了表达感激,我们可以点进去为坤坤加一份阅读量。
  首先我们看看第 1 页转发的链接,长这个样子:
  第 2 页长这个样子,注意到多了个 #_rnd36 参数:
  #_rnd36
  第 3 页参数为 #_rnd39
  #_rnd39
  第 4 页参数为 #_rnd76:
  #_rnd76
  多看几个链接你就可以发现,这个转发网页的网址毫无规律可言,所以只能通过分页器去翻页加载数据。下面就开始我们的实战教学环节。
  1.创建 SiteMap
  我们首先创建一个 SiteMap,这次取名为 cxk,起始链接为
  
  2.创建容器的 selector
  因为我们要点击分页器,外面的容器的类型我们选为 Element Click,具体的参数解释可以看下图,我们之前在详细解释过一次,这里就不多言了。
  container 的预览是下图的样子:
  分页器选择的过程可以参看下图:
  3.创建子选择器
  这几个子选择器都比较简单,类型都是文字选择器,我们选择了评论用户名,评论内容和评论时间三种类型的内容。
  4.抓取数据
  按照 Sitemap cxk -> Scrape 的操作路径就可以抓取数据了。
  5.一些问题
  如果你看了我上面的教程立马去爬数据,可能遇到的第一个问题就是,300w 的数据,难道我全部爬下来吗?
  听上去也不太现实,毕竟 Web Scraper 针对的数据量都是相对比较小的,几万数据都算多的了,数据再大你就得考虑爬取时间是否太长,数据如何存储,如何应对网址的反爬虫系统(比如说冷不丁的跳出一个验证码,这个 Web Scraper 是无能为力的)。
  考虑到这个问题,前面的的教程你又看过的话,可能想着用 :nth-of-type(-n+N) 控制抓取 N 条数据。如果你尝试了,就会发现这个方法根本没用。
  失效的原因其实涉及到一点点网页的知识了,感兴趣的话可以看看下面的解释,不感兴趣可以直接看最后的结论。
  像我前面介绍的和,他们新加载的数据,是在当前页面追加的,你一直下拉,数据一直加载,同时网页的滚动条会越来越短,这意味着所有的数据都在同一个页面。
  当我们用 :nth-of-type(-n+N) 控制加载数量时,其实相当于在这个网页设立一个计数器,当数据一直累加到我们想要的数量时,就会停止抓取。
  但是对于使用翻页器的网页,每次的翻页相当于刷新当前网页,这样每次都会设立一个计数器。
  比如说你想抓取 1000 条数据,但是第 1 页网页只有 20 条数据,抓到最后一条了,还差 980 条;然后一翻页,又设立一个新的计数器,抓完第 2 页的最后一条数据,还差 980,一翻页计数器就重置,又变成 1000 了......所以这个控制数量的方法就失效了。
  所以结论就是,如果翻页器类型的网页想提前结束抓取,只有断网的这种方法。当然,如果你有更好的方案,可以在评论里回复我,我们可以互相讨论一下。
  6.总结
  分页器是一种很常见的网页分页方法,我们可以通过 Web Scraper 中的 Element click 处理这种类型的网页,并通过断网的方法结束抓取。
  <p style="margin-top: 10px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;letter-spacing: 1.5px;line-height: normal;">● 简易数据分析(六):Web Scraper 翻页——抓取「滚动加载」类型网页
  ● 简易数据分析(二):Web Scraper 初尝鲜,抓取豆瓣高分电影
  ● 简易数据分析 (一):源起、了解 Web Scraper 与浏览器技巧
  <br /></p>
  ·END·
  图雀社区
  汇聚精彩的免费实战教程 查看全部

  简易数据分析(七):Web Scraper 抓取表格、分页器翻页数据
  今天我们讲讲如何抓取网页表格里的数据。首先我们分析一下,网页里的经典表格是怎么构成的。
  经典表格就这些知识点,没了。下面我们写个简单的表格 Web Scraper 爬虫。
  1.制作 Sitemap
  我们今天的练手网站是
  %C9%CF%BA%A3&txtDaoDa=%B1%B1%BE%A9
  爬虫的内容是抓取上海到北京的所有列车时刻表。
  我们先创建一个包含整个表格的 container,Type 类型选为 Table,表示我们要抓取表格。
  具体的参数如上图所示,因为比较简单,就不多说了。
  在这个面板下向下翻,会发现多了一个不一样的面板。观察一下你就会发现,这些数据其实就是表格数据类型的分类,在这个案例里,他把车次、出发站、开车时间等分类都列了出来。
  在 Table columns 这个分类里,每一行的内容旁边的选择按钮默认都是打勾的,也就是说默认都会抓取这些列的内容。如果你不想抓取某类内容,去掉对应的勾选就可以了。
  在你点击 Save selector 的按钮时,会发现 Result key 的一些选项报错,说什么 invalid format 格式无效:
  解决这个报错很简单,一般来说是 Result key 名字的长度不够,你给加个空格加个标点符号就行。如果还报错,就试试换成英文名字:
  解决报错保存成功后,我们就可以按照 Web Scraper 的爬取套路抓取数据了。
  2.为什么我不建议你用 Web Scraper 的 Table Selector?
  如果你按照刚刚的教程做下里,就会感觉很顺利,但是查看数据时就会傻眼了。
  刚开始抓取时,我们先用 Data preview 预览一下数据,会发现数据很完美:
  抓取数据后,在浏览器的预览面板预览,会发现车次这一列数据为 null,意味着没有抓取到相关内容:
  我们下载抓取的 CSV 文件后,在预览器里打开,会发现车次的数据出现了,但出发站的数据又为 null 了!
  这不是坑爹呢!
  关于这个问题我调查了半天,应该是 Web Scraper 对中文关键字索引的支持不太友好,所以会抛出一些诡异的 bug,因此我并不建议大家用它的 Table 功能。
  
  如果真的想抓取表格数据,我们可以用之前的方案,先创建一个类型为 Element 的 container,然后在 container 里再手动创建子选择器,这样就可以规避这个问题。
  上面只是一个原因,还有一个原因是,在现代网站,很少有人用 HTML 原始表格了。
  HTML 提供了表格的基础标签,比如说 、 、 等标签,这些标签上提供了默认的样式。好处是在互联网刚刚发展起来时,可以提供开箱即用的表格;缺点是样式太单一,不太好定制,后来很多网站用其它标签模拟表格,就像 PPT里用各种大小方块组合出一个表格一样,方便定制:
  出于这个原因,当你在用 Table Selector 匹配一个表格时,可能会死活匹配不上,因为从 Web Scraper 的角度考虑,你看到的那个表格就是个高仿,根本不是原装正品,自然是不认的。
  3.总结
  我们并不建议直接使用 Web Scraper 的 Table Selector,因为对中文支持不太友好,也不太好匹配现代网页。如果有抓取表格的需求,可以用之前的创建父子选择器的方法来做。
  前面几篇文章我们介绍了 Web Scraper 应对各种翻页的解决方法,比如说、和。今天我们说说一种更常见的翻页类型——分页器。
  本来想解释一下啥叫分页器,翻了一堆定义觉得很繁琐,大家也不是第一年上网了,看张图就知道了。我找了个功能最全的例子,支持数字页码调整,上一页下一页和指定页数跳转。
  今天我们就学学,Web Scraper 怎么对付这种类型的网页翻页。
  其实我们在本教程的第一个例子,中,豆瓣的这个电影榜单就是用分页器分割数据的:
  但当时我们是找网页链接规律抓取的,没有利用分页器去抓取。因为当一个网页的链接变化规律时,控制链接参数抓取是实现成本最低的;如果这个网页可以翻页,但是链接的变化不是规律的,就得去会一会这个分页器了。
  说这些理论有些枯燥,我们举个翻页链接不规律的例子。
  8 月 2 日是蔡徐坤的生日,为了表达庆祝,在微博上粉丝们给坤坤刷了 300W 的转发量,微博的转发数据正好是用分页器分割的,我们就分析一下微博的转发信息页面,看看这类数据怎么用 Web Scraper 抓取。
  这条微博的直达链接是:
  看了他那么多的视频,为了表达感激,我们可以点进去为坤坤加一份阅读量。
  首先我们看看第 1 页转发的链接,长这个样子:
  第 2 页长这个样子,注意到多了个 #_rnd36 参数:
  #_rnd36
  第 3 页参数为 #_rnd39
  #_rnd39
  第 4 页参数为 #_rnd76:
  #_rnd76
  多看几个链接你就可以发现,这个转发网页的网址毫无规律可言,所以只能通过分页器去翻页加载数据。下面就开始我们的实战教学环节。
  1.创建 SiteMap
  我们首先创建一个 SiteMap,这次取名为 cxk,起始链接为
  
  2.创建容器的 selector
  因为我们要点击分页器,外面的容器的类型我们选为 Element Click,具体的参数解释可以看下图,我们之前在详细解释过一次,这里就不多言了。
  container 的预览是下图的样子:
  分页器选择的过程可以参看下图:
  3.创建子选择器
  这几个子选择器都比较简单,类型都是文字选择器,我们选择了评论用户名,评论内容和评论时间三种类型的内容。
  4.抓取数据
  按照 Sitemap cxk -> Scrape 的操作路径就可以抓取数据了。
  5.一些问题
  如果你看了我上面的教程立马去爬数据,可能遇到的第一个问题就是,300w 的数据,难道我全部爬下来吗?
  听上去也不太现实,毕竟 Web Scraper 针对的数据量都是相对比较小的,几万数据都算多的了,数据再大你就得考虑爬取时间是否太长,数据如何存储,如何应对网址的反爬虫系统(比如说冷不丁的跳出一个验证码,这个 Web Scraper 是无能为力的)。
  考虑到这个问题,前面的的教程你又看过的话,可能想着用 :nth-of-type(-n+N) 控制抓取 N 条数据。如果你尝试了,就会发现这个方法根本没用。
  失效的原因其实涉及到一点点网页的知识了,感兴趣的话可以看看下面的解释,不感兴趣可以直接看最后的结论。
  像我前面介绍的和,他们新加载的数据,是在当前页面追加的,你一直下拉,数据一直加载,同时网页的滚动条会越来越短,这意味着所有的数据都在同一个页面。
  当我们用 :nth-of-type(-n+N) 控制加载数量时,其实相当于在这个网页设立一个计数器,当数据一直累加到我们想要的数量时,就会停止抓取。
  但是对于使用翻页器的网页,每次的翻页相当于刷新当前网页,这样每次都会设立一个计数器。
  比如说你想抓取 1000 条数据,但是第 1 页网页只有 20 条数据,抓到最后一条了,还差 980 条;然后一翻页,又设立一个新的计数器,抓完第 2 页的最后一条数据,还差 980,一翻页计数器就重置,又变成 1000 了......所以这个控制数量的方法就失效了。
  所以结论就是,如果翻页器类型的网页想提前结束抓取,只有断网的这种方法。当然,如果你有更好的方案,可以在评论里回复我,我们可以互相讨论一下。
  6.总结
  分页器是一种很常见的网页分页方法,我们可以通过 Web Scraper 中的 Element click 处理这种类型的网页,并通过断网的方法结束抓取。
  <p style="margin-top: 10px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;letter-spacing: 1.5px;line-height: normal;">● 简易数据分析(六):Web Scraper 翻页——抓取「滚动加载」类型网页
  ● 简易数据分析(二):Web Scraper 初尝鲜,抓取豆瓣高分电影
  ● 简易数据分析 (一):源起、了解 Web Scraper 与浏览器技巧
  <br /></p>
  ·END·
  图雀社区
  汇聚精彩的免费实战教程

四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话

网站优化优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2022-07-17 03:56 • 来自相关话题

  四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话
  在过去两年时间里,阿里达摩院对话智能团队(Conversational AI)围绕 TableQA 做了一系列探索,先后在四大国际权威榜单上取得第一名,并且开源了首个中文预训练表格模型。同时,把 TableQA 技术落地为产品,在阿里云智能客服中开始规模化推广,成为具备差异化竞争力的新产品。本文将对达摩院在 TableQA 技术方向的系列探索创新和业务落地做系统的梳理介绍。
  图 1:达摩院 TableQA 先后取得四大榜单第一
  在日常工作中,Excel 表格随处可见;在 APP 或网页中,表格是清晰友好的信息传递方式;在企业中,关系型数据库无所不在。由于表格数据结构清晰、易于维护,并且对人类理解和机器理解都比较友好,表格 / 关系型数据库是各行各业应用最普遍的结构化知识存储形式。
  但在表格知识的查询交互中,门槛却不低:对话系统或搜索引擎,并不能很好地将表格知识作为答案查询出来,而关系型数据库的查询更需要专业技术人员撰写查询语句(如 SQL 语句)来完成,对大多数用户来讲门槛更高。表格问答技术(TableQA)通过将自然语言转换为 SQL 查询语言,允许用户使用自然语言与表格知识直接交互,为表格知识的大规模交互使用铺平了道路。
  1. 什么是 TableQA
  什么是表格问答(TableQA)呢,我们通过一个例子来引入。如下图班级学生信息的 Table,用户可能会问:“告诉我 3 班最高的男生有多高?”。要想解决这个问题,需要先把自然语言转换成一个 SQL 语句,然后利用该 SQL 查询表格,最终得到答案。整个 TableQA 的基础问题就是如何解析自然语言:把自然语言文本转变为一个 SQL 语句。
  如果进一步考虑到多轮的情况,用户可能会接着上文问:“那最矮的呢?”,这个时候就需要利用上下文进行对话管理。除此之外,表格中的内容一般比较简练,经常是以实体词的方法呈现,比如身高值可能就是 “186”,如果只把这个数字返回给用户,可读性非常不友好。优雅的方式是结合上下文回复 “三班最高的男生有 1 米 86”,这就需要一个忠实且流畅的自然语言生成能力。
  图 2:TableQA 技术框架图
  由于表格内容复杂多样,涉及各行各业的专业知识,SQL 的标注难度大且成本高昂,模型迁移能力差,TableQA 一直是自然语言处理领域的难题。
  2. TableQA 的发展及难点
  TableQA 最早于 1972 年[1] 在数据库领域被提出,但在很长的时间里发展缓慢。但从 2017 年开始 [2],随着深度学习的蓬勃发展,该方向重新获得研究人员的关注,在过去几年里成为发展最快的一种问答方式。
  根据任务设定的复杂程度,TableQA 技术发展可以分为四个重要阶段:单表单轮、从单表到多表、从单轮到多轮、从理解到生成。
  图 3. TableQA 发展简史
  2.1. 单表单轮
  单表单轮是指用户只围绕一张表格进行单轮问答,该任务涉及的 SQL 类型较为简单,但在任务提出初期仍然极具挑战。比如在 2017 年单表单轮的数据集 WikiSQL [2] 推出时,仅有 36% 左右的准确率。该任务主要存在如下难点:
  一个直接的想法是将自然语言到 SQL 的转换过程看做序列到序列生成问题,但在领域初期,受限于无法保证序列生成的结果准确性,表现一直不佳。而相比直接利用 Seq2Seq 建模,后续大部分的工作将 SQL 的生成过程转换为等价的分类问题 (Seq2Set) [3]。如下图 4 所示,通过将 SQL 拆解为不同的子模块,比如 SELECT、WHERE 等,然后利用多任务的方式进行子模块的预测,最后进行 SQL 的组合。这样不仅可以保证 SQL 语法正确,速度上也有明显优势。
  图 4:基于 Seq2Set [3] 的 Text-to-SQL 示意图
  在这套框架下,研究人员展开了一系列的改进,比如子模块的模型设计 [4]、引入表格的类型信息[5]、将执行结果作为弱监督的训练标签等[6]。除此之外,一些工作专注于模式链接的改进,比如引入规则的方式执行链接,或利用 attention 的方式[7],又或者通过将模式链接转换为等价任务[8,9] 进行辅助学习。
  2.2. 从单表到多表
  单表单轮问题的设置较为简单,在真实世界的场景中,表格更多是以多张表的形式(特别是关系型数据库)出现的,这将涉及到多个表的联合查询。而且 SQL 语句的复杂程度也变得非常复杂,涉及到了 JOIN、UNION 等高级关键字。
  图 5:多表查询的复杂 SQL 示例
  相比单表单轮,多表单轮的任务主要存在以下难点:
  对于复杂的 SQL 语句,很难将其拆解为分类问题进行预测,所以学术界又回归到 Seq2Seq 过程,考虑如何设计有约束的生成过程,保证语法正确性。主流的工作在解码的过程中引入 AST 结构,利用树解码的方式建模语法规则[10]。
  图 6:Text-to-SQL 任务中的树状解码约束示意图[11]
  对于多表之间的结构,主要体现在外键、主键等,这些信息对于模型预测多表联合至关重要。一些研究人员将这种结构抽象为图的形式,并利用图神经网络进行学习[12]。
  图 7:Text-to-SQL 中将 Schema 建模为 Graph 示意图[12]
  对于模式链接,一些工作开始结合 Transformer 设计更好的模式链接模块,比如 RAT-SQL[18]、LGESQL[19] 等,这些方法更充分地考虑了自然语言中的单词到数据库模式的表、列、值的多粒度链接,极大地提升了模型的性能。近期,人们又开始关注面向表格的预训练模型,模式链接任务也成为重要的预训练目标,利用预训练强大的泛化能力,从而缓解跨领域问题。
  2.3. 从单轮到多轮
  很多情况下,用户需要与表格进行多轮的交互才能完成信息获取,所以 TableQA 进入了第三个阶段,从单轮问答升级为多轮问答,并可以和对话系统进行结合。对于多表多轮,难点主要围绕多轮建模:
  多轮理解一直是对话领域重要的方向,对于多轮问题的建模,通常有直接拼接、轮次 attention 和 gate attention 等方式:
  图 8:多轮建模中的直接拼接、turn attention 和 gate attention 示例 [11]
  与普通的多轮问答相比,TableQA 在历史轮次中生成的 SQL 也表达了丰富的上下文信息,且相比自然语言更加结构化,所以一些工作将历史的 SQL 作为当前轮的输入,增强上文信息。随着单轮的表格预训练模型的蓬勃发展,针对多轮的表格预训练模型也应运而生,进一步提升了多表多轮 TableQA 的理解性能。
  
  2.4. 从理解到生成
  模型生成 SQL 后执行查询,得到的结果仍然是表格,不利于用户阅读,所以 TableQA 需要构建回复生成能力。近年来预训练生成模型如 GPT、T5 等在文本生成相关任务中取得了显著提升,在 Table-to-Text 方向、KGPT 和 TableGPT 等模型也在关注基于结构化表格数据生成对应的文字描述。而 TableQA 的回复生成任务则给文本生成的方向带来了新的挑战:
  目前该方向的研究工作还处于比较空白的状态,具有较高的研究和应用价值。
  3. 达摩院取得四大国际榜单第一
  近些年来,TableQA 任务得到了学术界及工业届的共同关注,并取得了飞速的发展。而 Text-to-SQL 作为 TableQA 的核心技术 ,学术界推出了包括单表单轮 WikiSQL[2]、多表单轮 Spider[13]、多表多轮 SparC[14]、对话式 CoSQL[15] 等四个权威的国际公开数据集及榜单。根据每个数据库包含的表数量,可以分为单表和多表 (WikiSQL, Spider)问题,其中多表要求 SQL 有表格选择(join)的能力,生成的 SQL 较为复杂;根据问句的交互轮次,可以分为单轮和多轮 (SParC),多轮问题涉及到多轮理解,对模型的指代消歧及上下文建模能力提出了要求。进一步的,Text-to-SQL 可以融入到对话系统 (CoSQL),对理解、策略和生成能力提出了更高的要求,进一步提升任务的难度。
  3.1. 单表单轮 WikiSQL
  (1)WikiSQL 数据集介绍
  WikiSQL[2] 数据集是 Salesforce 在 2017 年提出的 Text-to-SQL 数据集,它包含了 26,521 个表格,80,645 条自然语言问句及其对应的 SQL 语句。WikiSQL 数据集存在单轮问句、围绕单表、SQL 类型简单等特点,如下图所示,WikiSQL 仅围绕一张表格进行简单问题的问答,所以设计到的 SQL 也只包含 SELECT、AGG、WHERE、CONDITION、OP 等关键字。
  图 9:WikiSQL 数据示例[2]
  尽管 WikiSQL 的数据构造较为简单,但在真实工业场景中,简单问题也是最常见的查询,先解决简单数据是后续的基础,所以达摩院团队先针对 WikiSQL 展开了研究。Text-to-SQL 的目标是将自然语言问题,依据数据库信息(schema) 得到可执行的 SQL。上面提到的模式链接(schema linking),即找到自然语言问题和模式之间的关联是转换过程中的核心步骤。当前,对于模式链接的识别与建模已经成了 Text-to-SQL 任务中的重要瓶颈。
  (2)SDSQL 模型取得第一
  为了更好地解决模式链接问题,达摩院创新性地提出了 Schema Dependency [16] 的建模方式:借助已有的 SQL 解析出细粒度的链接关系,作为自然语言问题和 Schema 之间的桥梁。
  图 10:SDSQL 模型中的的 Schema Dependency 示意图[16]
  基于这种建模方式,达摩院提出一种新的解析模型 SDSQL。如下图 11 所示,将自然语言问题与 Schema 作为输入,然后利用多任务的方式优化模型:一个任务是利用双仿射的网络结构来预测解析好的 Schema Dependency,强化模型的模式链接能力;另一个任务是通过分类的方式来预测 SQL 中的每一个组件,从而完成 SQL 的预测。
  图 11:SDSQL 模型结构图[16]
  就效果而言,2021 年 3 月, SDSQL 在 WikiSQL 上取得了 SOTA 的成绩:
  图 12:达摩院提出的 SDSQL 模型在 WikiSQL 取得第一
  3.2. 多表单轮 Spider
  (1)Spider 榜单介绍
  Spider [13] 是耶鲁大学 & Salesforce 在 EMNLP 2018 上提出的单轮、围绕多表、复杂 SQL 的语义解析和 Text-to-SQL 数据集。Spider 是目前 Text-to-SQL 领域最受关注的数据集,吸引了阿里达摩院、微软、Meta、亚马逊、百度等大厂的持续投入。
  该数据集包含了 10,181 个问题和 5,693 个不同的复杂 SQL 查询语句,涉及 200 个多表数据库,涵盖 138 个不同的领域。相比 WikiSQL 的简单 SQL 形式,Spider 包含了大量复杂的 SQL (如 GROUP BY、ORDER BY 或嵌套查询)以及具备多个表和外键的数据库。
  图 13:Spider 数据示例[13]
  (2)SSSQL 模型取得第一
  大家对于 Spider 的建模主要围绕结构层面展开,之前提到的模式链接其实是自然语言问题和 Schema 之间的结构建模。另外一些工作主要关注于 Schema 内部的建模,将 Schema 中的表、列、外键信息转换为图的形式,融入网络进行学习。而达摩院首先关注到了自然语言问题内部结构对 Text-to-SQL 任务的重要性。
  如下图 14 所示,在模式连接正确的情况下,仍然无法预测到正确的 SQL。在这个例子中,因为按照词粒度的距离 id 和 date 的距离很远,导致在 SELECT 部分丢失了 transcript_id 这一列。
  图 14:因未考虑问题内部结构产生的错误示例
  为了解决上述问题,达摩院利用句法关系建模了自然语言问题内部的关系,在句法距离的度量下,id 和 date 的关系将被拉近,从而生成正确的 SQL。基于这个动机,达摩院提出了 SSSQL,将自然语言内部的结构、Schema 内部的结构以及自然语言与 Schema 之间的结构同时建模,并结合一种关系解耦的优化方法,实现了更强的表征能力。
  就效果而言,2021 年 9 月, SSSQL 在 Spider 上取得了 SOTA 的成绩:
  图 15:达摩院提出的 S²SQL 模型在 Spider 榜单取得第一
  3.3. 多表多轮 SParC
  (1)SParC 榜单介绍
  WikiSQL 和 Spider 都是单轮的 Text-to-SQL 数据,耶鲁大学 & Salesforce 于 ACL 2019 提出有上下文依赖的多轮数据集 SParC[14],作者基于 Spider 进行多轮扩展。不同于 Spider 一句话对应一个最终 SQL,SParC 通常需要通过多轮对话来实现用户的查询意图,并且在交互过程中,用户会省略很多之前提到的信息,或者新增、修改之前提到过一些内容,使得该任务更具挑战性。
  
  图 16:SParC 数据示例[17]
  (2)R²SQL 模型取得第一
  R²SQL[17] 模型的内容详见下一部分。2020 年 7 月,R²SQL 模型在 SParC 榜单取得第一。
  图 17:达摩院提出的 R²SQL 模型在 SParC 榜单取得第一
  3.4. 对话式 CoSQL
  (1)CoSQL 榜单介绍
  EMNLP 2019 提出的 CoSQL[15] 将 Text-to-SQL 融入到对话场景,仅存在 3,007 条问题 - SQL 对,但在交互过程中增加了拒识、澄清等轮次,并且需要验证返回的结果后,生成类人的自然语言回复。同时,数据集中 SQL 各关键字的分布差异较大,是目前 Text-to-SQL 领域最难、最复杂的数据集。
  (2)R²SQL 模型取得第一
  总体来说,SParC 和 CoSQL 遇到的共同挑战在于上下文建模,如何在上下文环境下共同建模自然语言问题、Schema,以及模式链接是亟需解决的问题。达摩院在 AAAI 2021 提出了一种基于动态上下文模式图的框架 R²SQL[17],可以联合地学习自然语言问题、数据库模式(schema)和其之间模式链接的表征,捕捉复杂的上下文依赖。
  图 18:R²SQL 模型中的动态模式图
  除此之外,在用户不断询问的过程中,存在用户聚焦的意图发生变化的现象,而这种话题偏移将导致模型的性能下降。为了解决这个问题,达摩院使用类人的想法,使用衰减机制来降低之前模式链接的权重,从而更关注当前轮次的模式链接。2020 年 8 月,R²SQL 模型在取得 CoSQL 榜单第一名。
  图 19:达摩院提出的 R²SQL 模型在 CoSQL 榜单取得第一
  4. 开源中文首个预训练表格模型
  达摩院对话智能团队提出了基于 “模式依存” 的表格预训练模型,普遍提升各场景表格的问答准确率。如下图 20 所示,模式依存就是在自然语言问句和表格结构模式之间建立依存关系,比如先让模型学习到 “男生” 和“性别”之间存在依存关系,进一步还可以定义这种依存关系的具体名称为 “WHERE-value”。同时,达摩院团队还使用了模仿人类的“课程学习” 方法来克服多样化难度数据带来的影响。
  图 20:Schema Dependency 示例
  在耶鲁大学发布的业界最大规模的英文文本 - 表格数据集 WikiSQL,以及微软构建的英文文本 - 表格高难度预测任务 SQuALL 数据集上,SDCUP 模型均取得业界最优效果。详细内容参见《》。相关模型和训练代码已经开源于阿里巴巴预训练模型体系 AliceMind。
  AliceMind项目地址:
  5. TableQA 规模化业务落地
  达摩院 Conversational AI 团队已经将本文介绍的预训练表格模型和相关 Text-to-SQL 技术应用于阿里云智能客服 (云小蜜) 的 TableQA 产品中。为满足不同场景下的训练和交付需求,表格管理、数据配置、模型训练、效果干预等功能已全部完成产品化,基本做到知识梳理低成本,问答构建高速度,模型训练好效果,满足各个场景的交付运维需求。目前已在多个项目中开始规模化交付。
  图 21:TableQA 在阿里云智能客服中的产品
  6. 未来的技术展望
  经过过去两年的探索,达摩院在 TableQA 方向,从单轮到多轮,从单表到多表,从下游模型到上游预训练表格模型,初步形成了比较体系的创新。但总体上,TableQA 还是一个新方向,面向未来,还有很多难题需要研究:
  大规模预训练表格理解模型;
  大规模预训练表格生成模型;
  更强大的 Text-to-SQL 模型;
  忠实流畅类人的 TableNLG;
  端到端开箱即用的 TableQA 系统;
  推广到更多的应用场景。
  欢迎感兴趣的同学一起学习交流。
  本文作者、阿里巴巴集团达摩院Conversational AI负责人李永彬将于2月底在机器之心机动组视频直播中分享「TableQA」的技术内容,敬请期待!
  参考资料
  [1] Woods, W。 A。, Kaplan, R。, and Webber, N。 B。 The LUNAR sciences natural language information system: Final report。 Technical Report BBN Report No。 2378, Bolt Beranek and Newman, Cambridge, Massachusetts。 (1972)[2] Zhong, Victor, Caiming Xiong, and Richard Socher。 "Seq2sql: Generating structured queries from natural language using reinforcement learning。" arXiv preprint arXiv:1709。00103 (2017)。[3] Xu, Xiaojun, Chang Liu, and Dawn Song。 "Sqlnet: Generating structured queries from natural language without reinforcement learning。
  " ICLR (2018)[4] Lyu, Qin, et al。 "Hybrid ranking network for text-to-sql。" arXiv preprint arXiv:2008。04759 (2020)。[5] Yu, Tao, et al。 "Typesql: Knowledge-based type-aware neural text-to-sql generation。" NAACL (2018)。[6] Wang, Chenglong, et al。 "Robust text-to-sql generation with execution-guided decoding。" arXiv preprint arXiv:1807。03100 (2018)[7] Hwang, Wonseok, et al。 "A comprehensive exploration on wikisql with table-aware word contextualization。" arXiv preprint arXiv:1902。01069 (2019)。[8] Ma, Jianqiang, et al。
   "Mention extraction and linking for sql query generation。" EMNLP(2020)。[9] Xuan, Kuan, et al。 "SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising。" arXiv preprint arXiv:2105。07911 (2021)。[10] Yin, Pengcheng, and Graham Neubig。 "A syntactic neural model for general-purpose code generation。" ACL (2017)。[11] Liu, Qian, et al。 "How far are we from effective context modeling? an exploratory study on semantic parsing in context。" IJCAI (2020)。[12] Bogin, Ben, Matt Gardner, and Jonathan Berant。
   "Representing schema structure with graph neural networks for text-to-sql parsing。" arXiv preprint arXiv:1905。06241 (2019)。[13] Yu, Tao, et al。 "Spider: A large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-sql task。" EMNLP (2018)。[14] Yu, Tao, et al。 "Sparc: Cross-domain semantic parsing in context。" ACL (2019)。[15] Yu, Tao, et al。 "CoSQL: A conversational text-to-SQL challenge towards cross-domain natural language interfaces to databases。" EMNLP (2019)。
  [16] Hui, Binyuan, et al。 "Improving Text-to-SQL with Schema Dependency Learning。" arXiv preprint arXiv:2103。04399 (2021)。[17] Hui, Binyuan, et al。 "Dynamic Hybrid Relation Exploration Network for Cross-Domain Context-Dependent Semantic Parsing。" AAAI (2021)。[18] Wang, Bailin, et al。 "Rat-sql: Relation-aware schema encoding and linking for text-to-sql parsers。" ACL (2019)。[19] Cao, Ruisheng, et al。 "LGESQL: Line Graph Enhanced Text-to-SQL Model with Mixed Local and Non-Local Relations。" ACL (2021)。
  新的一年你能有多「虎」机器之心联合千寻位置邀请大家一起来测虎力造北斗元气满满迎新春转发游戏结束后的虎力值海报到机器之心公众号后台即有机会赢取限量版「虎力全开」新年礼盒截至2022年1月30日赶紧扫码玩起来
  ©THE END 查看全部

  四大榜单第一名、首个中文预训练表格模型开源,达摩院TableQA技术让表格说话
  在过去两年时间里,阿里达摩院对话智能团队(Conversational AI)围绕 TableQA 做了一系列探索,先后在四大国际权威榜单上取得第一名,并且开源了首个中文预训练表格模型。同时,把 TableQA 技术落地为产品,在阿里云智能客服中开始规模化推广,成为具备差异化竞争力的新产品。本文将对达摩院在 TableQA 技术方向的系列探索创新和业务落地做系统的梳理介绍。
  图 1:达摩院 TableQA 先后取得四大榜单第一
  在日常工作中,Excel 表格随处可见;在 APP 或网页中,表格是清晰友好的信息传递方式;在企业中,关系型数据库无所不在。由于表格数据结构清晰、易于维护,并且对人类理解和机器理解都比较友好,表格 / 关系型数据库是各行各业应用最普遍的结构化知识存储形式。
  但在表格知识的查询交互中,门槛却不低:对话系统或搜索引擎,并不能很好地将表格知识作为答案查询出来,而关系型数据库的查询更需要专业技术人员撰写查询语句(如 SQL 语句)来完成,对大多数用户来讲门槛更高。表格问答技术(TableQA)通过将自然语言转换为 SQL 查询语言,允许用户使用自然语言与表格知识直接交互,为表格知识的大规模交互使用铺平了道路。
  1. 什么是 TableQA
  什么是表格问答(TableQA)呢,我们通过一个例子来引入。如下图班级学生信息的 Table,用户可能会问:“告诉我 3 班最高的男生有多高?”。要想解决这个问题,需要先把自然语言转换成一个 SQL 语句,然后利用该 SQL 查询表格,最终得到答案。整个 TableQA 的基础问题就是如何解析自然语言:把自然语言文本转变为一个 SQL 语句。
  如果进一步考虑到多轮的情况,用户可能会接着上文问:“那最矮的呢?”,这个时候就需要利用上下文进行对话管理。除此之外,表格中的内容一般比较简练,经常是以实体词的方法呈现,比如身高值可能就是 “186”,如果只把这个数字返回给用户,可读性非常不友好。优雅的方式是结合上下文回复 “三班最高的男生有 1 米 86”,这就需要一个忠实且流畅的自然语言生成能力。
  图 2:TableQA 技术框架图
  由于表格内容复杂多样,涉及各行各业的专业知识,SQL 的标注难度大且成本高昂,模型迁移能力差,TableQA 一直是自然语言处理领域的难题。
  2. TableQA 的发展及难点
  TableQA 最早于 1972 年[1] 在数据库领域被提出,但在很长的时间里发展缓慢。但从 2017 年开始 [2],随着深度学习的蓬勃发展,该方向重新获得研究人员的关注,在过去几年里成为发展最快的一种问答方式。
  根据任务设定的复杂程度,TableQA 技术发展可以分为四个重要阶段:单表单轮、从单表到多表、从单轮到多轮、从理解到生成。
  图 3. TableQA 发展简史
  2.1. 单表单轮
  单表单轮是指用户只围绕一张表格进行单轮问答,该任务涉及的 SQL 类型较为简单,但在任务提出初期仍然极具挑战。比如在 2017 年单表单轮的数据集 WikiSQL [2] 推出时,仅有 36% 左右的准确率。该任务主要存在如下难点:
  一个直接的想法是将自然语言到 SQL 的转换过程看做序列到序列生成问题,但在领域初期,受限于无法保证序列生成的结果准确性,表现一直不佳。而相比直接利用 Seq2Seq 建模,后续大部分的工作将 SQL 的生成过程转换为等价的分类问题 (Seq2Set) [3]。如下图 4 所示,通过将 SQL 拆解为不同的子模块,比如 SELECT、WHERE 等,然后利用多任务的方式进行子模块的预测,最后进行 SQL 的组合。这样不仅可以保证 SQL 语法正确,速度上也有明显优势。
  图 4:基于 Seq2Set [3] 的 Text-to-SQL 示意图
  在这套框架下,研究人员展开了一系列的改进,比如子模块的模型设计 [4]、引入表格的类型信息[5]、将执行结果作为弱监督的训练标签等[6]。除此之外,一些工作专注于模式链接的改进,比如引入规则的方式执行链接,或利用 attention 的方式[7],又或者通过将模式链接转换为等价任务[8,9] 进行辅助学习。
  2.2. 从单表到多表
  单表单轮问题的设置较为简单,在真实世界的场景中,表格更多是以多张表的形式(特别是关系型数据库)出现的,这将涉及到多个表的联合查询。而且 SQL 语句的复杂程度也变得非常复杂,涉及到了 JOIN、UNION 等高级关键字。
  图 5:多表查询的复杂 SQL 示例
  相比单表单轮,多表单轮的任务主要存在以下难点:
  对于复杂的 SQL 语句,很难将其拆解为分类问题进行预测,所以学术界又回归到 Seq2Seq 过程,考虑如何设计有约束的生成过程,保证语法正确性。主流的工作在解码的过程中引入 AST 结构,利用树解码的方式建模语法规则[10]。
  图 6:Text-to-SQL 任务中的树状解码约束示意图[11]
  对于多表之间的结构,主要体现在外键、主键等,这些信息对于模型预测多表联合至关重要。一些研究人员将这种结构抽象为图的形式,并利用图神经网络进行学习[12]。
  图 7:Text-to-SQL 中将 Schema 建模为 Graph 示意图[12]
  对于模式链接,一些工作开始结合 Transformer 设计更好的模式链接模块,比如 RAT-SQL[18]、LGESQL[19] 等,这些方法更充分地考虑了自然语言中的单词到数据库模式的表、列、值的多粒度链接,极大地提升了模型的性能。近期,人们又开始关注面向表格的预训练模型,模式链接任务也成为重要的预训练目标,利用预训练强大的泛化能力,从而缓解跨领域问题。
  2.3. 从单轮到多轮
  很多情况下,用户需要与表格进行多轮的交互才能完成信息获取,所以 TableQA 进入了第三个阶段,从单轮问答升级为多轮问答,并可以和对话系统进行结合。对于多表多轮,难点主要围绕多轮建模:
  多轮理解一直是对话领域重要的方向,对于多轮问题的建模,通常有直接拼接、轮次 attention 和 gate attention 等方式:
  图 8:多轮建模中的直接拼接、turn attention 和 gate attention 示例 [11]
  与普通的多轮问答相比,TableQA 在历史轮次中生成的 SQL 也表达了丰富的上下文信息,且相比自然语言更加结构化,所以一些工作将历史的 SQL 作为当前轮的输入,增强上文信息。随着单轮的表格预训练模型的蓬勃发展,针对多轮的表格预训练模型也应运而生,进一步提升了多表多轮 TableQA 的理解性能。
  
  2.4. 从理解到生成
  模型生成 SQL 后执行查询,得到的结果仍然是表格,不利于用户阅读,所以 TableQA 需要构建回复生成能力。近年来预训练生成模型如 GPT、T5 等在文本生成相关任务中取得了显著提升,在 Table-to-Text 方向、KGPT 和 TableGPT 等模型也在关注基于结构化表格数据生成对应的文字描述。而 TableQA 的回复生成任务则给文本生成的方向带来了新的挑战:
  目前该方向的研究工作还处于比较空白的状态,具有较高的研究和应用价值。
  3. 达摩院取得四大国际榜单第一
  近些年来,TableQA 任务得到了学术界及工业届的共同关注,并取得了飞速的发展。而 Text-to-SQL 作为 TableQA 的核心技术 ,学术界推出了包括单表单轮 WikiSQL[2]、多表单轮 Spider[13]、多表多轮 SparC[14]、对话式 CoSQL[15] 等四个权威的国际公开数据集及榜单。根据每个数据库包含的表数量,可以分为单表和多表 (WikiSQL, Spider)问题,其中多表要求 SQL 有表格选择(join)的能力,生成的 SQL 较为复杂;根据问句的交互轮次,可以分为单轮和多轮 (SParC),多轮问题涉及到多轮理解,对模型的指代消歧及上下文建模能力提出了要求。进一步的,Text-to-SQL 可以融入到对话系统 (CoSQL),对理解、策略和生成能力提出了更高的要求,进一步提升任务的难度。
  3.1. 单表单轮 WikiSQL
  (1)WikiSQL 数据集介绍
  WikiSQL[2] 数据集是 Salesforce 在 2017 年提出的 Text-to-SQL 数据集,它包含了 26,521 个表格,80,645 条自然语言问句及其对应的 SQL 语句。WikiSQL 数据集存在单轮问句、围绕单表、SQL 类型简单等特点,如下图所示,WikiSQL 仅围绕一张表格进行简单问题的问答,所以设计到的 SQL 也只包含 SELECT、AGG、WHERE、CONDITION、OP 等关键字。
  图 9:WikiSQL 数据示例[2]
  尽管 WikiSQL 的数据构造较为简单,但在真实工业场景中,简单问题也是最常见的查询,先解决简单数据是后续的基础,所以达摩院团队先针对 WikiSQL 展开了研究。Text-to-SQL 的目标是将自然语言问题,依据数据库信息(schema) 得到可执行的 SQL。上面提到的模式链接(schema linking),即找到自然语言问题和模式之间的关联是转换过程中的核心步骤。当前,对于模式链接的识别与建模已经成了 Text-to-SQL 任务中的重要瓶颈。
  (2)SDSQL 模型取得第一
  为了更好地解决模式链接问题,达摩院创新性地提出了 Schema Dependency [16] 的建模方式:借助已有的 SQL 解析出细粒度的链接关系,作为自然语言问题和 Schema 之间的桥梁。
  图 10:SDSQL 模型中的的 Schema Dependency 示意图[16]
  基于这种建模方式,达摩院提出一种新的解析模型 SDSQL。如下图 11 所示,将自然语言问题与 Schema 作为输入,然后利用多任务的方式优化模型:一个任务是利用双仿射的网络结构来预测解析好的 Schema Dependency,强化模型的模式链接能力;另一个任务是通过分类的方式来预测 SQL 中的每一个组件,从而完成 SQL 的预测。
  图 11:SDSQL 模型结构图[16]
  就效果而言,2021 年 3 月, SDSQL 在 WikiSQL 上取得了 SOTA 的成绩:
  图 12:达摩院提出的 SDSQL 模型在 WikiSQL 取得第一
  3.2. 多表单轮 Spider
  (1)Spider 榜单介绍
  Spider [13] 是耶鲁大学 & Salesforce 在 EMNLP 2018 上提出的单轮、围绕多表、复杂 SQL 的语义解析和 Text-to-SQL 数据集。Spider 是目前 Text-to-SQL 领域最受关注的数据集,吸引了阿里达摩院、微软、Meta、亚马逊、百度等大厂的持续投入。
  该数据集包含了 10,181 个问题和 5,693 个不同的复杂 SQL 查询语句,涉及 200 个多表数据库,涵盖 138 个不同的领域。相比 WikiSQL 的简单 SQL 形式,Spider 包含了大量复杂的 SQL (如 GROUP BY、ORDER BY 或嵌套查询)以及具备多个表和外键的数据库。
  图 13:Spider 数据示例[13]
  (2)SSSQL 模型取得第一
  大家对于 Spider 的建模主要围绕结构层面展开,之前提到的模式链接其实是自然语言问题和 Schema 之间的结构建模。另外一些工作主要关注于 Schema 内部的建模,将 Schema 中的表、列、外键信息转换为图的形式,融入网络进行学习。而达摩院首先关注到了自然语言问题内部结构对 Text-to-SQL 任务的重要性。
  如下图 14 所示,在模式连接正确的情况下,仍然无法预测到正确的 SQL。在这个例子中,因为按照词粒度的距离 id 和 date 的距离很远,导致在 SELECT 部分丢失了 transcript_id 这一列。
  图 14:因未考虑问题内部结构产生的错误示例
  为了解决上述问题,达摩院利用句法关系建模了自然语言问题内部的关系,在句法距离的度量下,id 和 date 的关系将被拉近,从而生成正确的 SQL。基于这个动机,达摩院提出了 SSSQL,将自然语言内部的结构、Schema 内部的结构以及自然语言与 Schema 之间的结构同时建模,并结合一种关系解耦的优化方法,实现了更强的表征能力。
  就效果而言,2021 年 9 月, SSSQL 在 Spider 上取得了 SOTA 的成绩:
  图 15:达摩院提出的 S²SQL 模型在 Spider 榜单取得第一
  3.3. 多表多轮 SParC
  (1)SParC 榜单介绍
  WikiSQL 和 Spider 都是单轮的 Text-to-SQL 数据,耶鲁大学 & Salesforce 于 ACL 2019 提出有上下文依赖的多轮数据集 SParC[14],作者基于 Spider 进行多轮扩展。不同于 Spider 一句话对应一个最终 SQL,SParC 通常需要通过多轮对话来实现用户的查询意图,并且在交互过程中,用户会省略很多之前提到的信息,或者新增、修改之前提到过一些内容,使得该任务更具挑战性。
  
  图 16:SParC 数据示例[17]
  (2)R²SQL 模型取得第一
  R²SQL[17] 模型的内容详见下一部分。2020 年 7 月,R²SQL 模型在 SParC 榜单取得第一。
  图 17:达摩院提出的 R²SQL 模型在 SParC 榜单取得第一
  3.4. 对话式 CoSQL
  (1)CoSQL 榜单介绍
  EMNLP 2019 提出的 CoSQL[15] 将 Text-to-SQL 融入到对话场景,仅存在 3,007 条问题 - SQL 对,但在交互过程中增加了拒识、澄清等轮次,并且需要验证返回的结果后,生成类人的自然语言回复。同时,数据集中 SQL 各关键字的分布差异较大,是目前 Text-to-SQL 领域最难、最复杂的数据集。
  (2)R²SQL 模型取得第一
  总体来说,SParC 和 CoSQL 遇到的共同挑战在于上下文建模,如何在上下文环境下共同建模自然语言问题、Schema,以及模式链接是亟需解决的问题。达摩院在 AAAI 2021 提出了一种基于动态上下文模式图的框架 R²SQL[17],可以联合地学习自然语言问题、数据库模式(schema)和其之间模式链接的表征,捕捉复杂的上下文依赖。
  图 18:R²SQL 模型中的动态模式图
  除此之外,在用户不断询问的过程中,存在用户聚焦的意图发生变化的现象,而这种话题偏移将导致模型的性能下降。为了解决这个问题,达摩院使用类人的想法,使用衰减机制来降低之前模式链接的权重,从而更关注当前轮次的模式链接。2020 年 8 月,R²SQL 模型在取得 CoSQL 榜单第一名。
  图 19:达摩院提出的 R²SQL 模型在 CoSQL 榜单取得第一
  4. 开源中文首个预训练表格模型
  达摩院对话智能团队提出了基于 “模式依存” 的表格预训练模型,普遍提升各场景表格的问答准确率。如下图 20 所示,模式依存就是在自然语言问句和表格结构模式之间建立依存关系,比如先让模型学习到 “男生” 和“性别”之间存在依存关系,进一步还可以定义这种依存关系的具体名称为 “WHERE-value”。同时,达摩院团队还使用了模仿人类的“课程学习” 方法来克服多样化难度数据带来的影响。
  图 20:Schema Dependency 示例
  在耶鲁大学发布的业界最大规模的英文文本 - 表格数据集 WikiSQL,以及微软构建的英文文本 - 表格高难度预测任务 SQuALL 数据集上,SDCUP 模型均取得业界最优效果。详细内容参见《》。相关模型和训练代码已经开源于阿里巴巴预训练模型体系 AliceMind。
  AliceMind项目地址:
  5. TableQA 规模化业务落地
  达摩院 Conversational AI 团队已经将本文介绍的预训练表格模型和相关 Text-to-SQL 技术应用于阿里云智能客服 (云小蜜) 的 TableQA 产品中。为满足不同场景下的训练和交付需求,表格管理、数据配置、模型训练、效果干预等功能已全部完成产品化,基本做到知识梳理低成本,问答构建高速度,模型训练好效果,满足各个场景的交付运维需求。目前已在多个项目中开始规模化交付。
  图 21:TableQA 在阿里云智能客服中的产品
  6. 未来的技术展望
  经过过去两年的探索,达摩院在 TableQA 方向,从单轮到多轮,从单表到多表,从下游模型到上游预训练表格模型,初步形成了比较体系的创新。但总体上,TableQA 还是一个新方向,面向未来,还有很多难题需要研究:
  大规模预训练表格理解模型;
  大规模预训练表格生成模型;
  更强大的 Text-to-SQL 模型;
  忠实流畅类人的 TableNLG;
  端到端开箱即用的 TableQA 系统;
  推广到更多的应用场景。
  欢迎感兴趣的同学一起学习交流。
  本文作者、阿里巴巴集团达摩院Conversational AI负责人李永彬将于2月底在机器之心机动组视频直播中分享「TableQA」的技术内容,敬请期待!
  参考资料
  [1] Woods, W。 A。, Kaplan, R。, and Webber, N。 B。 The LUNAR sciences natural language information system: Final report。 Technical Report BBN Report No。 2378, Bolt Beranek and Newman, Cambridge, Massachusetts。 (1972)[2] Zhong, Victor, Caiming Xiong, and Richard Socher。 "Seq2sql: Generating structured queries from natural language using reinforcement learning。" arXiv preprint arXiv:1709。00103 (2017)。[3] Xu, Xiaojun, Chang Liu, and Dawn Song。 "Sqlnet: Generating structured queries from natural language without reinforcement learning。
  " ICLR (2018)[4] Lyu, Qin, et al。 "Hybrid ranking network for text-to-sql。" arXiv preprint arXiv:2008。04759 (2020)。[5] Yu, Tao, et al。 "Typesql: Knowledge-based type-aware neural text-to-sql generation。" NAACL (2018)。[6] Wang, Chenglong, et al。 "Robust text-to-sql generation with execution-guided decoding。" arXiv preprint arXiv:1807。03100 (2018)[7] Hwang, Wonseok, et al。 "A comprehensive exploration on wikisql with table-aware word contextualization。" arXiv preprint arXiv:1902。01069 (2019)。[8] Ma, Jianqiang, et al。
   "Mention extraction and linking for sql query generation。" EMNLP(2020)。[9] Xuan, Kuan, et al。 "SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising。" arXiv preprint arXiv:2105。07911 (2021)。[10] Yin, Pengcheng, and Graham Neubig。 "A syntactic neural model for general-purpose code generation。" ACL (2017)。[11] Liu, Qian, et al。 "How far are we from effective context modeling? an exploratory study on semantic parsing in context。" IJCAI (2020)。[12] Bogin, Ben, Matt Gardner, and Jonathan Berant。
   "Representing schema structure with graph neural networks for text-to-sql parsing。" arXiv preprint arXiv:1905。06241 (2019)。[13] Yu, Tao, et al。 "Spider: A large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-sql task。" EMNLP (2018)。[14] Yu, Tao, et al。 "Sparc: Cross-domain semantic parsing in context。" ACL (2019)。[15] Yu, Tao, et al。 "CoSQL: A conversational text-to-SQL challenge towards cross-domain natural language interfaces to databases。" EMNLP (2019)。
  [16] Hui, Binyuan, et al。 "Improving Text-to-SQL with Schema Dependency Learning。" arXiv preprint arXiv:2103。04399 (2021)。[17] Hui, Binyuan, et al。 "Dynamic Hybrid Relation Exploration Network for Cross-Domain Context-Dependent Semantic Parsing。" AAAI (2021)。[18] Wang, Bailin, et al。 "Rat-sql: Relation-aware schema encoding and linking for text-to-sql parsers。" ACL (2019)。[19] Cao, Ruisheng, et al。 "LGESQL: Line Graph Enhanced Text-to-SQL Model with Mixed Local and Non-Local Relations。" ACL (2021)。
  新的一年你能有多「虎」机器之心联合千寻位置邀请大家一起来测虎力造北斗元气满满迎新春转发游戏结束后的虎力值海报到机器之心公众号后台即有机会赢取限量版「虎力全开」新年礼盒截至2022年1月30日赶紧扫码玩起来
  ©THE END

网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!

网站优化优采云 发表了文章 • 0 个评论 • 163 次浏览 • 2022-07-17 03:49 • 来自相关话题

  网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!
  吾爱资源集,关注每天好资源!
  今天小编给大家推荐两个可免费实用,且非常实用的神网站。一个一个看一下吧!
  01 白描网页版
  这个网站其实是白描APP的网页版,不用登陆,即可免费使用。主要包含三大功能:图片文字提取、电子表格识别以及扫描PDF转文字。
  首页如上图所示,小编主要测试了图片文字提取以及电子表格识别,图片文字提取是英文文字,小编进行了对比,非常准确!
  
  可以对应导出相应的文件格式,比如文字可以导出DOCX,表格可以导出成为EXCEL,如下图所示:
  地址:
  02I love PDF
  这个网站主要提供PDF的相关功能,小编对于PDF工具提供了很多,这款是网页版本,虽然对应有PC版本,但网页版更加方便!
  
  这上面的所有功能都可以免注册使用,而且对于PDF的大小没有限制,绝对的神器。如下,小编测试的PDF大小大概40多M,而且选择的高功能压缩!
  最后的结果:
  地址:
  好了,今天的分享就到这里,希望大家喜欢!
  喜欢的话记得点击“好看”支持哟! 查看全部

  网页表格抓取 可白嫖的两个神网站!都是小编经常用的哟!
  吾爱资源集,关注每天好资源!
  今天小编给大家推荐两个可免费实用,且非常实用的神网站。一个一个看一下吧!
  01 白描网页版
  这个网站其实是白描APP的网页版,不用登陆,即可免费使用。主要包含三大功能:图片文字提取、电子表格识别以及扫描PDF转文字。
  首页如上图所示,小编主要测试了图片文字提取以及电子表格识别,图片文字提取是英文文字,小编进行了对比,非常准确!
  
  可以对应导出相应的文件格式,比如文字可以导出DOCX,表格可以导出成为EXCEL,如下图所示:
  地址:
  02I love PDF
  这个网站主要提供PDF的相关功能,小编对于PDF工具提供了很多,这款是网页版本,虽然对应有PC版本,但网页版更加方便!
  
  这上面的所有功能都可以免注册使用,而且对于PDF的大小没有限制,绝对的神器。如下,小编测试的PDF大小大概40多M,而且选择的高功能压缩!
  最后的结果:
  地址:
  好了,今天的分享就到这里,希望大家喜欢!
  喜欢的话记得点击“好看”支持哟!

GPL页面表格奇奇怪怪的更新

网站优化优采云 发表了文章 • 0 个评论 • 138 次浏览 • 2022-06-21 07:30 • 来自相关话题

  GPL页面表格奇奇怪怪的更新
  
  
  今天是生信星球陪你的第863天
  
  大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
  就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
  这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
  0.因数据库和R包更新导致的问题
  从GPL页面上下载注释表格,是获取探针注释的方法之一,通常是找不到注释包的第二选择。
  更新之前的下载方式是(2022年之前我们的直播课堂上是这样讲的,2022年以及之后的课上已经更新好了):
  library(GEOquery)<br />a = getGEO("GPL570",destdir = ".")<br />b = a@dataTable@table<br />ids2 = b[,c("ID","Gene Symbol")]<br />
  更新之前:运行getGEO这句代码,函数会自动读取“GPL570.soft”文件,得到一个GPL对象。
  更新之后: GPL570.soft文件从原来的75M变成了现在的几十G,而且所有的平台soft都被压缩成了gz格式。压缩一下倒是不影响下载,但导致了工作目录下确实有GPL570.soft文件的情况下,函数也不识别,而是从网页上去下载GPL570.soft.gz,几十G,实在是duck不必。
  1.小的文件,方法不变
  当然,GPL570表格文件是本来就大(表格的大小在网页上有写),对于比较小的表格文件可以继续使用原来的方法:
  library(GEOquery)<br />a2 = getGEO("GPL7759",destdir = ".")<br />class(a2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  2.针对大文件的新方法
  针对这种比较大的注释文件,需要更改一下策略:
  从GPL570的网页上拉到最后,有一个文件:
  
  从网页上把它下载下来,放在工作目录,本地读取。
  b = read.table("GPL570-55999.txt",header = T,<br />                 quote = "\"",sep = "\t",check.names = F)<br />ids2 = b[,c("ID","Gene Symbol")]<br />colnames(ids2) = c("probe_id","symbol")<br />head(ids2)<br /><br />##    probe_id           symbol<br />## 1 1007_s_at DDR1 /// MIR4640<br />## 2   1053_at             RFC2<br />## 3    117_at            HSPA6<br />## 4    121_at             PAX8<br />## 5 1255_g_at           GUCA1A<br />## 6   1294_at MIR5193 /// UBA7<br />
  3.备用方法
  只要不是特别大的文件,可以先试试getgeo下载,如果网络不好导致失败,就从网页下载soft格式的文件。
  点开上面箭头所指的地方,就能网页下载soft文件了,文件大小还可以接受,不至于有几个G的。
  b2 = getGEO(filename = "GPL7759_family.soft.gz",destdir = ".")<br />class(b2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  如果因为代码看不懂,而跟不上正文的节奏,可以来找我,系统学习。以下课程都是循环开课。下一期的时间,点进去咨询微信咯 查看全部

  GPL页面表格奇奇怪怪的更新
  
  
  今天是生信星球陪你的第863天
  
  大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
  就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
  这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
  0.因数据库和R包更新导致的问题
  从GPL页面上下载注释表格,是获取探针注释的方法之一,通常是找不到注释包的第二选择。
  更新之前的下载方式是(2022年之前我们的直播课堂上是这样讲的,2022年以及之后的课上已经更新好了):
  library(GEOquery)<br />a = getGEO("GPL570",destdir = ".")<br />b = a@dataTable@table<br />ids2 = b[,c("ID","Gene Symbol")]<br />
  更新之前:运行getGEO这句代码,函数会自动读取“GPL570.soft”文件,得到一个GPL对象。
  更新之后: GPL570.soft文件从原来的75M变成了现在的几十G,而且所有的平台soft都被压缩成了gz格式。压缩一下倒是不影响下载,但导致了工作目录下确实有GPL570.soft文件的情况下,函数也不识别,而是从网页上去下载GPL570.soft.gz,几十G,实在是duck不必。
  1.小的文件,方法不变
  当然,GPL570表格文件是本来就大(表格的大小在网页上有写),对于比较小的表格文件可以继续使用原来的方法:
  library(GEOquery)<br />a2 = getGEO("GPL7759",destdir = ".")<br />class(a2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  2.针对大文件的新方法
  针对这种比较大的注释文件,需要更改一下策略:
  从GPL570的网页上拉到最后,有一个文件:
  
  从网页上把它下载下来,放在工作目录,本地读取。
  b = read.table("GPL570-55999.txt",header = T,<br />                 quote = "\"",sep = "\t",check.names = F)<br />ids2 = b[,c("ID","Gene Symbol")]<br />colnames(ids2) = c("probe_id","symbol")<br />head(ids2)<br /><br />##    probe_id           symbol<br />## 1 1007_s_at DDR1 /// MIR4640<br />## 2   1053_at             RFC2<br />## 3    117_at            HSPA6<br />## 4    121_at             PAX8<br />## 5 1255_g_at           GUCA1A<br />## 6   1294_at MIR5193 /// UBA7<br />
  3.备用方法
  只要不是特别大的文件,可以先试试getgeo下载,如果网络不好导致失败,就从网页下载soft格式的文件。
  点开上面箭头所指的地方,就能网页下载soft文件了,文件大小还可以接受,不至于有几个G的。
  b2 = getGEO(filename = "GPL7759_family.soft.gz",destdir = ".")<br />class(b2)<br /><br />## [1] "GPL"<br />## attr(,"package")<br />## [1] "GEOquery"<br />
  如果因为代码看不懂,而跟不上正文的节奏,可以来找我,系统学习。以下课程都是循环开课。下一期的时间,点进去咨询微信咯

Python+Streamlit在网页中提取PDF中文字、表格对象

网站优化优采云 发表了文章 • 0 个评论 • 179 次浏览 • 2022-06-19 13:11 • 来自相关话题

  Python+Streamlit在网页中提取PDF中文字、表格对象
  大家好,今天给大家带来的是结合Streamlit,我们提取PDF文档中的一些内容的方法,如提取PDF的基本信息、文本信息、表格。
  实现效果实现代码
<p>import streamlit as st<br />import pdfplumber<br />import io<br />from pandas import DataFrame<br />import pandas as pd<br />import fitz<br />import streamlit.components.v1 as components<br />st.set_page_config(page_title="操作PDF", layout="wide")<br /><br />css = """<br />#MainMenu {visibility:hidden;}<br />footer {visibility:hidden;}<br /><br />.stDownloadButton>button {<br />    background-color: #0099ff;<br />    color:#ffffff;<br />}<br /><br />.stDownloadButton>button:hover {<br />    background-color: #00ff00;<br />    color:#ff0000;<br />    }<br /><br />"""<br />st.markdown(css, unsafe_allow_html=True)<br /><br />def convert_df(df):<br />    st.download_button(<br />        label="点我下载表格",<br />        data=df.to_csv().encode('gbk'),<br />        file_name='table.csv',<br />        mime='text/csv',<br />    )<br /><br />def draw_table(df, theme, table_height):<br />    columns = df.columns<br />    thead1=""""""<br />    thead_temp = []<br />    for k in range(len(list(columns))):<br />        thead_temp.append(""""""+str(list(columns)[k])+"""""")<br />    header = thead1+"".join(thead_temp)+""""""<br />    rows = []<br />    rows_temp = []<br />    for i in range(df.shape[0]):<br />        rows.append(""""""+str(i+1)+"""""")<br />        rows_temp.append(df.iloc[i].values.tolist())<br />    td_temp = []<br />    for j in range(len(rows_temp)):<br />        for m in range(len(rows_temp[j])):<br />            td_temp.append(""""""+str(rows_temp[j][m])+"""""")<br />    td_temp2 = []<br />    for n in range(len(td_temp)):<br />        td_temp2.append(td_temp[n:n+df.shape[1]])<br />    td_temp3 = []<br />    for x in range(len(td_temp2)):<br />        if int(x % (df.shape[1])) == 0:<br />            td_temp3.append(td_temp2[x])<br />    td_temp4 = []<br />    for y in range(len(td_temp3)):<br />        td_temp4.append("".join(td_temp3[y]))<br />    td_temp5 = []<br />    for v in range(len(td_temp4)):<br />        td_temp5.append(""""""+str(v+1)+""""""+str(td_temp4[v])+"""""")<br />    table_html = """"""+\<br />    """"""+\<br />    """ 查看全部

  Python+Streamlit在网页中提取PDF中文字、表格对象
  大家好,今天给大家带来的是结合Streamlit,我们提取PDF文档中的一些内容的方法,如提取PDF的基本信息、文本信息、表格。
  实现效果实现代码
<p>import streamlit as st<br />import pdfplumber<br />import io<br />from pandas import DataFrame<br />import pandas as pd<br />import fitz<br />import streamlit.components.v1 as components<br />st.set_page_config(page_title="操作PDF", layout="wide")<br /><br />css = """<br />#MainMenu {visibility:hidden;}<br />footer {visibility:hidden;}<br /><br />.stDownloadButton>button {<br />    background-color: #0099ff;<br />    color:#ffffff;<br />}<br /><br />.stDownloadButton>button:hover {<br />    background-color: #00ff00;<br />    color:#ff0000;<br />    }<br /><br />"""<br />st.markdown(css, unsafe_allow_html=True)<br /><br />def convert_df(df):<br />    st.download_button(<br />        label="点我下载表格",<br />        data=df.to_csv().encode('gbk'),<br />        file_name='table.csv',<br />        mime='text/csv',<br />    )<br /><br />def draw_table(df, theme, table_height):<br />    columns = df.columns<br />    thead1=""""""<br />    thead_temp = []<br />    for k in range(len(list(columns))):<br />        thead_temp.append(""""""+str(list(columns)[k])+"""""")<br />    header = thead1+"".join(thead_temp)+""""""<br />    rows = []<br />    rows_temp = []<br />    for i in range(df.shape[0]):<br />        rows.append(""""""+str(i+1)+"""""")<br />        rows_temp.append(df.iloc[i].values.tolist())<br />    td_temp = []<br />    for j in range(len(rows_temp)):<br />        for m in range(len(rows_temp[j])):<br />            td_temp.append(""""""+str(rows_temp[j][m])+"""""")<br />    td_temp2 = []<br />    for n in range(len(td_temp)):<br />        td_temp2.append(td_temp[n:n+df.shape[1]])<br />    td_temp3 = []<br />    for x in range(len(td_temp2)):<br />        if int(x % (df.shape[1])) == 0:<br />            td_temp3.append(td_temp2[x])<br />    td_temp4 = []<br />    for y in range(len(td_temp3)):<br />        td_temp4.append("".join(td_temp3[y]))<br />    td_temp5 = []<br />    for v in range(len(td_temp4)):<br />        td_temp5.append(""""""+str(v+1)+""""""+str(td_temp4[v])+"""""")<br />    table_html = """"""+\<br />    """"""+\<br />    """

提取网站表格千万行,使用Power Query不用愁

网站优化优采云 发表了文章 • 0 个评论 • 299 次浏览 • 2022-06-18 12:23 • 来自相关话题

  提取网站表格千万行,使用Power Query不用愁
  有时候我们想要复制网站的表格,却发现无法复制,怎么办呢?这是网站为了保护数据直接被复制,而特意设置的技巧。Excel目前已经非常强大、智能. 我们可以通过Power Query快速提取网站表格。千万不要傻傻一个个复制数据了。
  这是腾讯网上关于海外疫情数据,你如果想直接复制,会发现,无法复制。现在我们可以通过Power Query快速简单获取网站数据表。
  操作步骤:
  1、首先复制网站网址,打开excel,必须是2016版本以上,才内置Power Query。
  单击数据选项栏——自网页,出现如下界面:
  
  将网站网址粘贴到URL框中,点击确定。
  GIF如下:
  2、连接成功之后,出现如下界面:
  选中右边的Table 0,也就是表格文件,点击:加载。
  GIF如下:
  加载的表格如下:
  如此我们就快速的将网站中的表格数据导出到excel中。小伙伴们,你学会了吗?赶紧试一下吧。接下来是激动人心的福利时刻:
  
  昨天获奖公布
   查看全部

  提取网站表格千万行,使用Power Query不用愁
  有时候我们想要复制网站的表格,却发现无法复制,怎么办呢?这是网站为了保护数据直接被复制,而特意设置的技巧。Excel目前已经非常强大、智能. 我们可以通过Power Query快速提取网站表格。千万不要傻傻一个个复制数据了。
  这是腾讯网上关于海外疫情数据,你如果想直接复制,会发现,无法复制。现在我们可以通过Power Query快速简单获取网站数据表。
  操作步骤:
  1、首先复制网站网址,打开excel,必须是2016版本以上,才内置Power Query。
  单击数据选项栏——自网页,出现如下界面:
  
  将网站网址粘贴到URL框中,点击确定。
  GIF如下:
  2、连接成功之后,出现如下界面:
  选中右边的Table 0,也就是表格文件,点击:加载。
  GIF如下:
  加载的表格如下:
  如此我们就快速的将网站中的表格数据导出到excel中。小伙伴们,你学会了吗?赶紧试一下吧。接下来是激动人心的福利时刻:
  
  昨天获奖公布
  

学Python=写爬虫?0代码爬下95%网站的数据

网站优化优采云 发表了文章 • 0 个评论 • 82 次浏览 • 2022-06-18 02:23 • 来自相关话题

  学Python=写爬虫?0代码爬下95%网站的数据
  像知乎、微博这样的网站,可以挖掘不同话题的关注者,发掘潜在用户,或者爬取评论做词频分析,研究他们对某个产品或某个消息的反应。
  
  信息跟踪
  某个地方政策的网站最近有没有更新,某个关注的人最近发了什么微博?没有时间一直盯着刷,做一个爬虫,每周自动爬一次数据,随时获取最新的消息。
  
  批量下载
  在招标信息网站1分钟把和你企业有关的标书爬下来,分门别类发给商务部门;把图片分享网站的图片,族库网站上的下载地址,一次性抓取,再扔到迅雷里批量下载。可以大量节省一个一个下载的时间。
  求职和生活
  找工作的时候,批量爬取主流招聘网站上的相关职位,做成数据分析表,帮助自己快速找到合适的工作;租房的时候,爬取租房网站的信息,综合对比附近的房源价格;想买车,所有新车和二手车的相关数据,也能一起爬下来做对比。
  
  数据支撑
  对于你所处的行业现状、企业发展、人才分布,原本只能查到别人做好的零星数据,现在你可以自己去爬数据,再做成可视化图表,无论是对内做研究,还是对外做汇报,数据都能成为支撑你观点的利器。
  一次和@Vctcn93聊起爬虫,他这样说:
  
  有网站的地方就有数据,有数据的地方,就能用爬虫给抓下来。除了前面说的几个特定场景,一个对数据敏感的人应该长期锻炼:怎样提出一个问题,怎样去找能够洞悉问题的数据,以及怎样在海量的数据中发掘出自己想要的答案。
  这是大数据时代里,每一个小白观察和理解世界的方式。
  前些天我们出了一门PowerBI数据可视化分析课,教给你怎样把表格里的数据集中到一起,彼此关联,做出简洁漂亮的可视化报表。
  教程里面的几个案例的数据,都是用这个技巧爬下来的,比如:
  抓取招聘网站的数据,然后分析BIM的相关职位在不同地区、不同规模的企业怎样分布?怎样用5秒钟找到适合自己的工作岗位?
  
  用豆瓣电影TOP250的数据分析案例,教给你怎样在有限的页面里呈现更多维度的数据可视化。快速帮助别人选出一部适合自己的电影。
  
  抓取中国各省近三年的地产行业数据,分析不同地区、不同类型的地产项目,分年、分季度的增长情况,从而看出什么地方、哪个领域发展得更好?
  如果你学完了这套爬虫课,对数据分析有进一步的兴趣,可以扫码看看我们的数据分析和可视化课程,这两套课学下来,你就可以算是正式入门数据分析了。
  这次BIMBOX出品的《0代码网络爬虫课》,一共15讲,我们用豆瓣、知乎、京东、招标信息网、住建部官网、Pexels图片网站、IT桔子公司信息、族库网、知识星球、Bilibili等网站的不同案例,给你讲解了下面这些内容:
  
  正如课程的标题所说,整个学习过程和Python没有丝毫的关系,从头至尾不需要写一行代码,小白也能很快学会。
  学爬虫不等于学Python,它只是Python功能的一个分支而已。只不过在很多培训机构的宣传下,爬虫成了Python的代名词。
  通过这个教程,BIMBOX想要做的,是把拦在你面前高昂的学费和对代码的学习恐惧扫干净,让你花上一两天的时间感受到数据的魅力,和自动化带来的快乐。
  看着一个网页在屏幕上自动翻页、滚动,几分钟后成千上万行数据被抓取到一个表格里,那种快感和喜悦只有亲身体会过才能知道。
  《0代码网络爬虫课》,秉承BIMBOX的一贯风格,课程的声音干净,画面清晰,剪掉了50%的废话和停顿,让你学习得更轻松。
  另外,我们为这门课程开设了专门的学习交流微信群,加群的方式详见教程说明页,初学的时候一定会遇到各种问题,我们会和其他共同学习的小伙伴等你参与探讨。
  如果你想花两天时间,从数据小白到爬取数据的高手,就扫码拿下吧。
  有态度,有深度,BIMBOX,咱们下次见! 查看全部

  学Python=写爬虫?0代码爬下95%网站的数据
  像知乎、微博这样的网站,可以挖掘不同话题的关注者,发掘潜在用户,或者爬取评论做词频分析,研究他们对某个产品或某个消息的反应。
  
  信息跟踪
  某个地方政策的网站最近有没有更新,某个关注的人最近发了什么微博?没有时间一直盯着刷,做一个爬虫,每周自动爬一次数据,随时获取最新的消息。
  
  批量下载
  在招标信息网站1分钟把和你企业有关的标书爬下来,分门别类发给商务部门;把图片分享网站的图片,族库网站上的下载地址,一次性抓取,再扔到迅雷里批量下载。可以大量节省一个一个下载的时间。
  求职和生活
  找工作的时候,批量爬取主流招聘网站上的相关职位,做成数据分析表,帮助自己快速找到合适的工作;租房的时候,爬取租房网站的信息,综合对比附近的房源价格;想买车,所有新车和二手车的相关数据,也能一起爬下来做对比。
  
  数据支撑
  对于你所处的行业现状、企业发展、人才分布,原本只能查到别人做好的零星数据,现在你可以自己去爬数据,再做成可视化图表,无论是对内做研究,还是对外做汇报,数据都能成为支撑你观点的利器。
  一次和@Vctcn93聊起爬虫,他这样说:
  
  有网站的地方就有数据,有数据的地方,就能用爬虫给抓下来。除了前面说的几个特定场景,一个对数据敏感的人应该长期锻炼:怎样提出一个问题,怎样去找能够洞悉问题的数据,以及怎样在海量的数据中发掘出自己想要的答案。
  这是大数据时代里,每一个小白观察和理解世界的方式。
  前些天我们出了一门PowerBI数据可视化分析课,教给你怎样把表格里的数据集中到一起,彼此关联,做出简洁漂亮的可视化报表。
  教程里面的几个案例的数据,都是用这个技巧爬下来的,比如:
  抓取招聘网站的数据,然后分析BIM的相关职位在不同地区、不同规模的企业怎样分布?怎样用5秒钟找到适合自己的工作岗位?
  
  用豆瓣电影TOP250的数据分析案例,教给你怎样在有限的页面里呈现更多维度的数据可视化。快速帮助别人选出一部适合自己的电影。
  
  抓取中国各省近三年的地产行业数据,分析不同地区、不同类型的地产项目,分年、分季度的增长情况,从而看出什么地方、哪个领域发展得更好?
  如果你学完了这套爬虫课,对数据分析有进一步的兴趣,可以扫码看看我们的数据分析和可视化课程,这两套课学下来,你就可以算是正式入门数据分析了。
  这次BIMBOX出品的《0代码网络爬虫课》,一共15讲,我们用豆瓣、知乎、京东、招标信息网、住建部官网、Pexels图片网站、IT桔子公司信息、族库网、知识星球、Bilibili等网站的不同案例,给你讲解了下面这些内容:
  
  正如课程的标题所说,整个学习过程和Python没有丝毫的关系,从头至尾不需要写一行代码,小白也能很快学会。
  学爬虫不等于学Python,它只是Python功能的一个分支而已。只不过在很多培训机构的宣传下,爬虫成了Python的代名词。
  通过这个教程,BIMBOX想要做的,是把拦在你面前高昂的学费和对代码的学习恐惧扫干净,让你花上一两天的时间感受到数据的魅力,和自动化带来的快乐。
  看着一个网页在屏幕上自动翻页、滚动,几分钟后成千上万行数据被抓取到一个表格里,那种快感和喜悦只有亲身体会过才能知道。
  《0代码网络爬虫课》,秉承BIMBOX的一贯风格,课程的声音干净,画面清晰,剪掉了50%的废话和停顿,让你学习得更轻松。
  另外,我们为这门课程开设了专门的学习交流微信群,加群的方式详见教程说明页,初学的时候一定会遇到各种问题,我们会和其他共同学习的小伙伴等你参与探讨。
  如果你想花两天时间,从数据小白到爬取数据的高手,就扫码拿下吧。
  有态度,有深度,BIMBOX,咱们下次见!

50行代码!用Python抓取全网黑丝舞蹈视频!

网站优化优采云 发表了文章 • 0 个评论 • 139 次浏览 • 2022-06-17 02:15 • 来自相关话题

  50行代码!用Python抓取全网黑丝舞蹈视频!
  
  大家好 我是小菜!
  最近念头不通达,尤其是看了"凡人修仙传"里面的名场面,韩立和陈师姐在白菊山的文戏,感叹凡人有情,大道无情。好好的陈师姐不珍惜,心里就想着南宫婉!不过凡人制作组还是很牛逼的,能把凡人画面制作的这么精良,文戏精彩打戏牛逼,目前应该是最火的国漫了,累计播放破8亿了,有兴趣的同学可以看看。
  言归正传,今天小菜给大家谋取福利,真正的手把手教学,爬取某手上的黑丝小姐姐的舞蹈视频,一起来看看吧。
  
  1.众里寻“址”千百度,一招教你无难度
  想要抓取小姐姐的舞蹈视频,最为关键的一点是要找到视频的链接地址。有的小伙伴可能一时间不知道如何来寻找链接地址,小菜今天就教给大家一招。

  首先,打开快手的网页地址,输入关键词"黑丝舞蹈",网页会自动检索相关的舞蹈视频。
  按照上图中的序号顺序,在开发者模式下,进入到“网络”选项:在搜索一栏输入关键词后,浏览器便会自动检索到相应的链接地址。无需我们再花费精力来寻找链接地址,大大的提升了我们的效率。
  通过上图可以发现,真正的舞蹈视频的地址为“photoUrl”,所以我们要做的就是抓取这些地址,然后将视频保存到本地。
  通过点击标头可以发现,请求的方式为“POST”,这一点非常关键。

  既然请求方式为POST,那么请求的构造参数在哪里呢?点击”载荷“我们便可以看到请求的参数。
  
  请求的构造参数,包含了”operationName“、”variables“等变量。
  很多小伙伴可能会问,爬虫是如何抓取数据的呢?
  我们可以记住一句话,爬虫即为通过程序模仿浏览器的请求行为,向服务器发送数据请求。如下图所示:
  
  爬虫,通过模拟浏览器向服务器发送请求requests,服务器响应请求后,便会发挥响应response,这样便完成了一次数据的交互,我们便可以通过解析返回来的数据,抓取到我们需要的信息。
  搞清楚上述的内容后,接下来我们就看一下程序是如何实现的吧。
  2.程序实现
  程序的实现,可以分为四个步骤,分别为:
  发送请求
  获取数据
  解析数据
  保存数据
  对于发送请求和获取数据,程序如下图所示。

  程序中,第22行为发送请求,json表示的是上面讲到的请求参数,headers则是爬虫伪装浏览器所需的内容。防止服务器轻松识别出爬虫,导致我们的程序获取数据失败。
  第25行程序是获取服务器响应的数据。
  获取得到数据后,接下来就是解析数据和保存数据。
  
  由于服务器返回的数据是字典形式的数据,因此可以直接解析数据,并获取我们需要的内容。获取到视频的链接地址后,我们便可以将视频内容保存到本地。
  
  3.总结
  以上就是今天小菜为大家带来的福利分享,喜欢的小伙伴可以按照上面的步骤操作一下,当然也可以更换关键词。也欢迎在下方积极留言,给个三连,吱一声支持我们,我们下期不见不散~
  <p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;text-size-adjust: auto;">
  <br style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /></p> 查看全部

  50行代码!用Python抓取全网黑丝舞蹈视频!
  
  大家好 我是小菜!
  最近念头不通达,尤其是看了"凡人修仙传"里面的名场面,韩立和陈师姐在白菊山的文戏,感叹凡人有情,大道无情。好好的陈师姐不珍惜,心里就想着南宫婉!不过凡人制作组还是很牛逼的,能把凡人画面制作的这么精良,文戏精彩打戏牛逼,目前应该是最火的国漫了,累计播放破8亿了,有兴趣的同学可以看看。
  言归正传,今天小菜给大家谋取福利,真正的手把手教学,爬取某手上的黑丝小姐姐的舞蹈视频,一起来看看吧。
  
  1.众里寻“址”千百度,一招教你无难度
  想要抓取小姐姐的舞蹈视频,最为关键的一点是要找到视频的链接地址。有的小伙伴可能一时间不知道如何来寻找链接地址,小菜今天就教给大家一招。

  首先,打开快手的网页地址,输入关键词"黑丝舞蹈",网页会自动检索相关的舞蹈视频。
  按照上图中的序号顺序,在开发者模式下,进入到“网络”选项:在搜索一栏输入关键词后,浏览器便会自动检索到相应的链接地址。无需我们再花费精力来寻找链接地址,大大的提升了我们的效率。
  通过上图可以发现,真正的舞蹈视频的地址为“photoUrl”,所以我们要做的就是抓取这些地址,然后将视频保存到本地。
  通过点击标头可以发现,请求的方式为“POST”,这一点非常关键。

  既然请求方式为POST,那么请求的构造参数在哪里呢?点击”载荷“我们便可以看到请求的参数。
  
  请求的构造参数,包含了”operationName“、”variables“等变量。
  很多小伙伴可能会问,爬虫是如何抓取数据的呢?
  我们可以记住一句话,爬虫即为通过程序模仿浏览器的请求行为,向服务器发送数据请求。如下图所示:
  
  爬虫,通过模拟浏览器向服务器发送请求requests,服务器响应请求后,便会发挥响应response,这样便完成了一次数据的交互,我们便可以通过解析返回来的数据,抓取到我们需要的信息。
  搞清楚上述的内容后,接下来我们就看一下程序是如何实现的吧。
  2.程序实现
  程序的实现,可以分为四个步骤,分别为:
  发送请求
  获取数据
  解析数据
  保存数据
  对于发送请求和获取数据,程序如下图所示。

  程序中,第22行为发送请求,json表示的是上面讲到的请求参数,headers则是爬虫伪装浏览器所需的内容。防止服务器轻松识别出爬虫,导致我们的程序获取数据失败。
  第25行程序是获取服务器响应的数据。
  获取得到数据后,接下来就是解析数据和保存数据。
  
  由于服务器返回的数据是字典形式的数据,因此可以直接解析数据,并获取我们需要的内容。获取到视频的链接地址后,我们便可以将视频内容保存到本地。
  
  3.总结
  以上就是今天小菜为大家带来的福利分享,喜欢的小伙伴可以按照上面的步骤操作一下,当然也可以更换关键词。也欢迎在下方积极留言,给个三连,吱一声支持我们,我们下期不见不散~
  <p style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;clear: both;min-height: 1em;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;text-size-adjust: auto;">
  <br style="margin: 0px;padding: 0px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /></p>

Excel也能实现网页自动化

网站优化优采云 发表了文章 • 0 个评论 • 226 次浏览 • 2022-06-16 13:07 • 来自相关话题

  Excel也能实现网页自动化
  Excel也能实现网页自动化1、前言
  Excel网页自动化的实现主要是依靠开发工具里面的Visual Basic功能(VBA),通常都将其称作宏。这个功能在制作报表的时候很实用,例如我们经常登录网站下载数据,然后利用这些数据制作日报、周报、月报等各种固定格式的业绩报表,此时如果将网页自动化嵌入其中,完全可以实现一键生成Excel报表的功能,节省时间。
  2、网页元素2.1、简单介绍
  假如,我们现在想了解一下和“宏”相关的内容,此时打开百度网页,在搜索框中输入“宏”,然后点击右边的“百度一下”按钮,这时就会出现许多和“宏”相关的内容。
  上述的一系列动作,我们可以看到“搜索框”和“百度一下”的位置,但是这些对于计算机来说是无法判断的,计算机无法看到“搜索框”和“百度一下”在哪里。那么计算机是如何判断的呢?
  对于网页来说,每一个元素都会有id、class或name来标记,如果这个元素有id的话,我们可以直接通过id来锁定他的位置,因为一个网页的id是唯一的。但是如果这个元素没有id,只有name或者class就比较麻烦一点,因为这两个都不是唯一标记,同一个网站里面可能会有许多重名的。这时还需要借助其他的方式来进一步判断。
  2.2、查看元素的具体方法
  这里我们以百度为例:


  使用宏来操作网页,就怕遇到元素不带id属性的,因为这种不方便锁定位置。如果用python的话可以使用xpath来锁定。
  3、网页元素定位工具
  注意:除了getElementById中Element为单数之外,其他的都是复数Elements。
  4、网页源码的简单介绍

  5、小案例——网页内容输入及模拟点击
  百度搜索“宏”为列,代码的具体作用,已在代码块中写了注释。
  看一下效果:
  通过内容输入和模拟点击,不仅可以用于百度搜索,也可以用于网页的自动登录操作,将账号和密码,以同样的方式传递到对应元素中,然后模拟点击登录即可实现。
  6、网页内容提取
  我之前写过一篇,这个案例将InternetExplorer和正则表达结合在一起,提取目标网站的数据,感兴趣的同学可以参考。 查看全部

  Excel也能实现网页自动化
  Excel也能实现网页自动化1、前言
  Excel网页自动化的实现主要是依靠开发工具里面的Visual Basic功能(VBA),通常都将其称作宏。这个功能在制作报表的时候很实用,例如我们经常登录网站下载数据,然后利用这些数据制作日报、周报、月报等各种固定格式的业绩报表,此时如果将网页自动化嵌入其中,完全可以实现一键生成Excel报表的功能,节省时间。
  2、网页元素2.1、简单介绍
  假如,我们现在想了解一下和“宏”相关的内容,此时打开百度网页,在搜索框中输入“宏”,然后点击右边的“百度一下”按钮,这时就会出现许多和“宏”相关的内容。
  上述的一系列动作,我们可以看到“搜索框”和“百度一下”的位置,但是这些对于计算机来说是无法判断的,计算机无法看到“搜索框”和“百度一下”在哪里。那么计算机是如何判断的呢?
  对于网页来说,每一个元素都会有id、class或name来标记,如果这个元素有id的话,我们可以直接通过id来锁定他的位置,因为一个网页的id是唯一的。但是如果这个元素没有id,只有name或者class就比较麻烦一点,因为这两个都不是唯一标记,同一个网站里面可能会有许多重名的。这时还需要借助其他的方式来进一步判断。
  2.2、查看元素的具体方法
  这里我们以百度为例:


  使用宏来操作网页,就怕遇到元素不带id属性的,因为这种不方便锁定位置。如果用python的话可以使用xpath来锁定。
  3、网页元素定位工具
  注意:除了getElementById中Element为单数之外,其他的都是复数Elements。
  4、网页源码的简单介绍

  5、小案例——网页内容输入及模拟点击
  百度搜索“宏”为列,代码的具体作用,已在代码块中写了注释。
  看一下效果:
  通过内容输入和模拟点击,不仅可以用于百度搜索,也可以用于网页的自动登录操作,将账号和密码,以同样的方式传递到对应元素中,然后模拟点击登录即可实现。
  6、网页内容提取
  我之前写过一篇,这个案例将InternetExplorer和正则表达结合在一起,提取目标网站的数据,感兴趣的同学可以参考。

网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭

网站优化优采云 发表了文章 • 0 个评论 • 206 次浏览 • 2022-06-16 12:47 • 来自相关话题

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  
  3.界面提示
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。

  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。

  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  
  四、示例代码的多种入口
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。

  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END 查看全部

  网页表格抓取 HarmonyOS小伙伴们注意啦!网站“Help”信息来袭
  HarmonyOS应用开发网站是各开发者小伙伴信息获取的重要途径。为了助力大家更方便、快速地获取到需要的信息,网站提供了多种快捷入口直达所需内容。近期都有哪些上新呢?文档君为大家一一揭晓~
  一、随需的界面信息帮助
  开发者们在使用DevEco Studio工具的过程中,可能会遇到各种疑问和错误信息。为了能让开发者快速定位、自助解决问题,针对常见错误码、弹窗提示框、功能指导等,DevEco Studio 2.1 Release提供了随需的界面帮助信息,使开发者精准获取HarmonyOS应用开发网站上对应的帮助指导。目前已覆盖SDK Manager、远程模拟器、调试运行等易出现问题的场景。文档君也将会持续提取开发者遇到的高频问题,持续完善界面帮助信息。
  1.Event Log
  当出现相关错误码时,会在Event Log窗口打印相关的错误提示信息。针对常见错误码,Event Log窗口提供错误原因描述+解决措施的提示信息。对于处理较为复杂的错误码提供了跳转到对应指导文档的链接,方便开发者们更快速、精准地找到对应的处理指导。
  
  2.弹窗
  在使用DevEco Studio时,如果出现异常,会给开发者弹出一个提示框。我们针对提示框的信息进行了优化,有的场景增加了跳转到指导文档的链接,方便开发者自助解决问题。
  
  3.界面提示
  在使用DevEco Studio的功能时,界面上提供了详细的提示信息,并在有必要的地方提供了官网文档的链接,让开发者无需在庞大的文档中心去搜寻相关的指导,便能高效地了解和使用该功能。

  二、常见问题汇总
  针对开发者在开发过程中遇到的问题,HarmonyOS应用开发网站也为大家提供了一个“常见问题”专区,汇总了各类常见问题的处理指导。

  在开发者论坛中,我们也置顶了FAQ汇总帖,并且会持续更新哦。也欢迎大家共享自己遇到的典型问题和解决方法,把经验分享给更多开发者。
  链接如下:
  三、智能客服
  除了界面帮助信息和常见问题专区,在遇到问题时还可以咨询智能客服哦。我们的智能客服还在成长中,欢迎大家多多提问,帮助它成长得更快、更智能!
  
  四、示例代码的多种入口
  示例代码是广大开发者最需要的学习资源,文档君会根据广大开发者的反馈不断为大家上线常用开发场景的示例代码。
  为了帮助开发者们快速熟悉HarmonyOS提供的API和应用开发流程,我们共上架了Ability、UI、Media等11个大类共70多个示例代码工程,支持开发者们学习各类应用接口。本期新增示例代码:JS卡片开发、分布式文件共享、媒体会话等22个示例代码工程,以及AI、Data、AccessibilityService三个分类。
  为了方便开发者一站式查阅, HarmonyOS应用开发官网提供了示例代码的多种入口。
  入口1:文档 > 示例代码
  在HarmonyOS应用开发官网的“文档”频道提供了“示例代码”栏,按分类以卡片形式展示App_Samples下的示例。
  
  入口2:文档 > 指南 > 示例 > 代码示例工程在HarmonyOS应用开发官网的“文档 > 指南 > 示例”下提供了“代码示例工程”页面,以表格的形式展示App_Samples下各示例的名称、简介和主要编程语言,方便开发者快速浏览和选择适用的示例。

  入口3:文档 > 指南 > 相关实例在HarmonyOS应用开发官网的“文档 > 指南”下开发指导的章节末尾提供了“相关实例”,利于开发者在学习相关内容后可快速获取示例代码。
  
  通过以上三种入口,开发者可以快捷地跳转到Gitee社区,下载示例代码。以上就是本期文档君为大家准备的HarmonyOS应用开发官网上新内容,希望能给各位开发者小伙伴们带来一定帮助。同时,我们十分重视开发者的意见,欢迎各位开发者在HarmonyOS应用开发官网和开发者论坛积极反馈,我们也将继续提升文档体验。感谢各位的支持及信赖,让我们一起携手,创造无限可能。
  END

数据获取,PQ就是这么任性!

网站优化优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2022-06-11 01:09 • 来自相关话题

  数据获取,PQ就是这么任性!
  
  PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源、任何结构、任何形式上获取数据
  
  数据的获取上不仅支持微软自己的数据格式,比如Excel、SQL Server、Access等;还支持SAP、Oracle、MySQL、DB2等几乎能见到的所有类型的数据格式,总有一种适合你;
  
  不仅能能从本地获取数据,还能从网页抓取数据。选择从Web获取数据,只要在弹出的URL窗口中输入网址,网页上的数据就可直接抓取到,用这种方法我们可以实时抓取股票涨跌、外汇牌价等等交易数据,现在我们尝试一下,比如从中国银行网站上抓取外汇牌价信息,先输入网址:

  点击确定以后,出现预览窗口,

  点击编辑,进入查询编辑器,
  
  外汇数据抓取完成,剩下的就是数据整理的过程了,而且这些抓取的信息可以随时刷新来更新数据的。这只是抓取外汇牌价的第一页,其实抓取多个页面数据也是可以的,等后面介绍过M函数以后再专门写一篇。
  以后再也不需要手动从网页上复制数据再粘贴到表格中了。
  其实每个人接触到的数据格式很有限,熟悉自己的数据类型知道如何导入到PowerBI以后,下一步就是进行数据处理的过程,这才是我们真正需要掌握的核心技巧。

  提升技能 开拓视野 查看全部

  数据获取,PQ就是这么任性!
  
  PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源、任何结构、任何形式上获取数据
  
  数据的获取上不仅支持微软自己的数据格式,比如Excel、SQL Server、Access等;还支持SAP、Oracle、MySQL、DB2等几乎能见到的所有类型的数据格式,总有一种适合你;
  
  不仅能能从本地获取数据,还能从网页抓取数据。选择从Web获取数据,只要在弹出的URL窗口中输入网址,网页上的数据就可直接抓取到,用这种方法我们可以实时抓取股票涨跌、外汇牌价等等交易数据,现在我们尝试一下,比如从中国银行网站上抓取外汇牌价信息,先输入网址:

  点击确定以后,出现预览窗口,

  点击编辑,进入查询编辑器,
  
  外汇数据抓取完成,剩下的就是数据整理的过程了,而且这些抓取的信息可以随时刷新来更新数据的。这只是抓取外汇牌价的第一页,其实抓取多个页面数据也是可以的,等后面介绍过M函数以后再专门写一篇。
  以后再也不需要手动从网页上复制数据再粘贴到表格中了。
  其实每个人接触到的数据格式很有限,熟悉自己的数据类型知道如何导入到PowerBI以后,下一步就是进行数据处理的过程,这才是我们真正需要掌握的核心技巧。

  提升技能 开拓视野

用Python获取银行网站上的存贷款利率表

网站优化优采云 发表了文章 • 0 个评论 • 346 次浏览 • 2022-06-05 10:27 • 来自相关话题

  用Python获取银行网站上的存贷款利率表
  项目背景
  最近在做一个利率市场化咨询的项目,主要是协助银行搭建定价体系,提供定价策略,在充分考虑产品差异、顾客需求差异、时间差异、地点差异等因素基础上制定不同的存贷款定价方法。
  在制定定价策略之前, 我们通常会分析客户所处的内外部的环境。外部环境分析可以分成宏观环境分析、行业环境分析等部分。 在行业分析(Industrial Analysis) 部分, 我们会确定客户的存贷款利率价格在业内处于什么样的水平。这就需要去采集各家银行的存贷款利率数据。
  
  然而Wind上没有相关的数据源可供下载。 这就需要不怕脏不怕累的小朋友们去百度搜索各家银行的网站,然后再用肉眼寻找躲在银行主页角落的“存贷款利率”的连接, 点击进入后将存贷款利率录入到Excel中。 这绝对是是对Junior耐心、眼力的一个考验... 这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。但是怎么才能让这种无聊的工作自动化呢 ?
  LifeIs Short,UsePython
  这时候我们就要引出 简单、易学、功能强大的编程语言 Python了。我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:
  
  需求分析
  在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。 我们当然也可以直接将数据直接也爬取下来存在Excel中, 但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。
  爬取过程
  首先, 我们先找到一个银行网址导航网站。我选取的是360导航页面 ():
  
  并查看源代码:
  
  可以看出, 银行网址都被放入了 a 这个标签中。 我们可以使用第三方库 BeautifulSoup 美丽汤对该标签进行下载。
  当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。 这时候我们就需要 正则表达式对于该标签下的链接进行筛选。经过观察, 大部分银行网站的标签名都以“银行”结尾, 所以我们使用
  " .银行 "
  作为筛选的正则。而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字, 所以我们使用:
  ”款利率. *"
  作为寻找存贷款利率链接的正则。
  下面是准备阶段的Python代码:
  #encoding:utf-8<br />import urllib2<br />import re<br />from bs4 import BeautifulSoup<br /><br />#建立列表储存url和对应的标签名<br />url = []<br />name= []<br />#建立集合, 将爬取过的页面放入,避免才重复<br />urlset =set("")<br />#用于筛选的正则表达式<br />source = ".银行"<br />temp = source.decode('utf8')<br />source2 = "款利率.*"<br />temp2 = source2.decode('utf8')<br />#导航网站作为我们爬取的根页面<br />response = urllib2.urlopen("http://hao.360.cn/yinhanggengduo.html")<br />html= response.read()<br />soup = BeautifulSoup(html,'html.parser')<br />#将满足条件的url和页面名称放入列表中<br />for tag in soup.find_all(name='a', text=re.compile(temp)):<br /> name.append(tag.string)<br /> url.append(tag.get('href'))<br />
  我们在获取好各大银行网站的url后, 我们需要进一步进入银行的存贷款利率信息表页面。但是经过进一步分析,我们发现,第二层的url一般都是短链接:
  
  无法直接使用,所以我们需要将短链接与域名进行拼接:
  #域名拼接<br />url2 = link + tag2.get('href')
  而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String, 通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
  if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />    url2 = tag2.get('href')
  并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。如果没有,则输出后加入urlset集合中:
  if url2 in urlset:<br /> continue<br />else:<br /> urlset.add(url2)
  Python输出部分代码:
  num = -1<br />for link in url:<br /> num = num + 1<br />    try:<br /> linkresponse = urllib2.urlopen(link)<br /> htmlpage = linkresponse.read()<br /> pagesoup = BeautifulSoup(htmlpage, 'html.parser')<br /> for tag2 in pagesoup.find_all(name='a', text=re.compile(temp2)):<br /> #得到银行名称<br />            bname = tag2.get_text()<br /> #得到页面名称<br />            href = str(tag2.get('href'))<br /> if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />                url2 = tag2.get('href')<br /> if url2 in urlset:<br /> #输出过, 跳出循环<br />                    continue<br />                else:<br /> #未输出过,放入集合<br />                    urlset.add(url2)<br /> else:<br /> #域名拼接<br />                url2 = link + tag2.get('href')<br /> if url2 in urlset:<br /> continue<br />                else:<br /> urlset.add(url2)<br /> print name[num]+" " + bname +" "+ url2<br /> except:<br /> pass<br /><br /><br /><br />
  运行结果
  我们在完成代码部分后,运行该部分Python脚本。
  
  查看输出:
  
  
  可以看出,我们需要的银行存贷款信息页面链接已经打印出来。 做咨询的小朋友们可以直接点击进入记录相关银行的存贷款利率了~
  最后,祝大家新年快乐~ 新的一年工作学习顺利~
   查看全部

  用Python获取银行网站上的存贷款利率表
  项目背景
  最近在做一个利率市场化咨询的项目,主要是协助银行搭建定价体系,提供定价策略,在充分考虑产品差异、顾客需求差异、时间差异、地点差异等因素基础上制定不同的存贷款定价方法。
  在制定定价策略之前, 我们通常会分析客户所处的内外部的环境。外部环境分析可以分成宏观环境分析、行业环境分析等部分。 在行业分析(Industrial Analysis) 部分, 我们会确定客户的存贷款利率价格在业内处于什么样的水平。这就需要去采集各家银行的存贷款利率数据。
  
  然而Wind上没有相关的数据源可供下载。 这就需要不怕脏不怕累的小朋友们去百度搜索各家银行的网站,然后再用肉眼寻找躲在银行主页角落的“存贷款利率”的连接, 点击进入后将存贷款利率录入到Excel中。 这绝对是是对Junior耐心、眼力的一个考验... 这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。但是怎么才能让这种无聊的工作自动化呢 ?
  LifeIs Short,UsePython
  这时候我们就要引出 简单、易学、功能强大的编程语言 Python了。我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:
  
  需求分析
  在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。 我们当然也可以直接将数据直接也爬取下来存在Excel中, 但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。
  爬取过程
  首先, 我们先找到一个银行网址导航网站。我选取的是360导航页面 ():
  
  并查看源代码:
  
  可以看出, 银行网址都被放入了 a 这个标签中。 我们可以使用第三方库 BeautifulSoup 美丽汤对该标签进行下载。
  当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。 这时候我们就需要 正则表达式对于该标签下的链接进行筛选。经过观察, 大部分银行网站的标签名都以“银行”结尾, 所以我们使用
  " .银行 "
  作为筛选的正则。而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字, 所以我们使用:
  ”款利率. *"
  作为寻找存贷款利率链接的正则。
  下面是准备阶段的Python代码:
  #encoding:utf-8<br />import urllib2<br />import re<br />from bs4 import BeautifulSoup<br /><br />#建立列表储存url和对应的标签名<br />url = []<br />name= []<br />#建立集合, 将爬取过的页面放入,避免才重复<br />urlset =set("")<br />#用于筛选的正则表达式<br />source = ".银行"<br />temp = source.decode('utf8')<br />source2 = "款利率.*"<br />temp2 = source2.decode('utf8')<br />#导航网站作为我们爬取的根页面<br />response = urllib2.urlopen("http://hao.360.cn/yinhanggengduo.html";)<br />html= response.read()<br />soup = BeautifulSoup(html,'html.parser')<br />#将满足条件的url和页面名称放入列表中<br />for tag in soup.find_all(name='a', text=re.compile(temp)):<br /> name.append(tag.string)<br /> url.append(tag.get('href'))<br />
  我们在获取好各大银行网站的url后, 我们需要进一步进入银行的存贷款利率信息表页面。但是经过进一步分析,我们发现,第二层的url一般都是短链接:
  
  无法直接使用,所以我们需要将短链接与域名进行拼接:
  #域名拼接<br />url2 = link + tag2.get('href')
  而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String, 通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
  if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />    url2 = tag2.get('href')
  并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。如果没有,则输出后加入urlset集合中:
  if url2 in urlset:<br /> continue<br />else:<br /> urlset.add(url2)
  Python输出部分代码:
  num = -1<br />for link in url:<br /> num = num + 1<br />    try:<br /> linkresponse = urllib2.urlopen(link)<br /> htmlpage = linkresponse.read()<br /> pagesoup = BeautifulSoup(htmlpage, 'html.parser')<br /> for tag2 in pagesoup.find_all(name='a', text=re.compile(temp2)):<br /> #得到银行名称<br />            bname = tag2.get_text()<br /> #得到页面名称<br />            href = str(tag2.get('href'))<br /> if href[0:4] == 'http':<br /> #长连接,不进行域名拼接<br />                url2 = tag2.get('href')<br /> if url2 in urlset:<br /> #输出过, 跳出循环<br />                    continue<br />                else:<br /> #未输出过,放入集合<br />                    urlset.add(url2)<br /> else:<br /> #域名拼接<br />                url2 = link + tag2.get('href')<br /> if url2 in urlset:<br /> continue<br />                else:<br /> urlset.add(url2)<br /> print name[num]+" " + bname +" "+ url2<br /> except:<br /> pass<br /><br /><br /><br />
  运行结果
  我们在完成代码部分后,运行该部分Python脚本。
  
  查看输出:
  
  
  可以看出,我们需要的银行存贷款信息页面链接已经打印出来。 做咨询的小朋友们可以直接点击进入记录相关银行的存贷款利率了~
  最后,祝大家新年快乐~ 新的一年工作学习顺利~
  

使用rvest从COSMIC中获取突变表格

网站优化优采云 发表了文章 • 0 个评论 • 255 次浏览 • 2022-06-05 10:26 • 来自相关话题

  使用rvest从COSMIC中获取突变表格
  
  2022的实习生和学徒培养开始啦,所以大家又可以看到了几百个全新的生物信息学知识点整理分享的简书,公众号,语雀账号了。挑选其中一些持久的,优秀的小伙伴的笔记转载到我们《生信技能树》公众号平台:
  下面是因INFORnotes的分享了解网页
  在学习如何爬取网页之前,要了解网页本身的结构。
  用于构建网页的主要语言为 HTML,CSS和Javascript。HTML为网页提供了其实际结构和内容。CSS为网页提供了其样式和外观,包括字体和颜色等细节。Javascript提供了网页功能。在此,我们将主要关注如何使用R包来读取构成网页的 HTML 。
  HTML
  HTML为一种标记语言,它描述了网页的内容和结构。不同的标签执行不同的功能。许多标签一起形成并包含网页的内容。常见的HTML文档如下所示:
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><p><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a second paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /></p>
  每个标签都是"配对"的, 且允许标签彼此嵌套。这种嵌套为 HTML 提供了一个"树状"结构。这种树状结构将告知我们在使用R进行网络抓取时如何查找某些标签。
  使用rvest从COSMIC中获取突变表格
  安装并导入R包
  install.packages(“rvest”)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />library(rvest)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />
  为了开始解析一个网页,我们首先需要从包含它的计算机服务器请求数据。在revest中,使用read_html(),接受一个web URL作为参数。
  以TP53基因为例,在COSMIC网站中检索。在网页右上角点击使用开发人员工具找到URL。
  
  read_html() 函数返回一个列表对象,该对象包含前面讨论的树状结构。 <p>url 查看全部

  使用rvest从COSMIC中获取突变表格
  
  2022的实习生和学徒培养开始啦,所以大家又可以看到了几百个全新的生物信息学知识点整理分享的简书,公众号,语雀账号了。挑选其中一些持久的,优秀的小伙伴的笔记转载到我们《生信技能树》公众号平台:
  下面是因INFORnotes的分享了解网页
  在学习如何爬取网页之前,要了解网页本身的结构。
  用于构建网页的主要语言为 HTML,CSS和Javascript。HTML为网页提供了其实际结构和内容。CSS为网页提供了其样式和外观,包括字体和颜色等细节。Javascript提供了网页功能。在此,我们将主要关注如何使用R包来读取构成网页的 HTML 。
  HTML
  HTML为一种标记语言,它描述了网页的内容和结构。不同的标签执行不同的功能。许多标签一起形成并包含网页的内容。常见的HTML文档如下所示:
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><p><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />
  <br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" />Here's a second paragraph of text!<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /><br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;visibility: visible;overflow-wrap: inherit !important;word-break: inherit !important;" /></p>
  每个标签都是"配对"的, 且允许标签彼此嵌套。这种嵌套为 HTML 提供了一个"树状"结构。这种树状结构将告知我们在使用R进行网络抓取时如何查找某些标签。
  使用rvest从COSMIC中获取突变表格
  安装并导入R包
  install.packages(“rvest”)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />library(rvest)<br style="outline: 0px;max-width: 100%;box-sizing: border-box;font-size: inherit;color: inherit;line-height: inherit;overflow-wrap: inherit !important;word-break: inherit !important;" />
  为了开始解析一个网页,我们首先需要从包含它的计算机服务器请求数据。在revest中,使用read_html(),接受一个web URL作为参数。
  以TP53基因为例,在COSMIC网站中检索。在网页右上角点击使用开发人员工具找到URL。
  
  read_html() 函数返回一个列表对象,该对象包含前面讨论的树状结构。 <p>url

官方客服QQ群

微信人工客服

QQ人工客服


线