技术文章:爬虫scrapy采集js里面的变量内容

优采云 发布时间: 2022-12-02 09:49

  技术文章:爬虫scrapy采集js里面的变量内容

  密钥代码如下,以下是已成功采集的数据

  工作原理:

  scrapy crawl bch -o items.json

  *敏*感*词*刮擦

  *敏*感*词*再

  从 bs4 *敏*感*词*美丽汤

  导入 JS2XML

  从 lxml 导入电子树

  导入请求

  从 bch.items import bchItem

  类 BchSpider(刮擦。蜘蛛):

  名称 = “BCH”

  allowed_domains = [“”]

  start_urls = [

  

" />

  “xxx”

  ]

  对于范围 (2,17) 中的 i:

  start_urls.append('xxx'+str(i) +'.html')

  def parse(self, response):

  #links = response.xpath('//a[re:test(@href,“\xxx”)]/@href').extract()

  links = response.xpath('//a[@class=“video_img”]/@href').extract()

  打印“你好”

  打印链接,响应

  项目 = []

  对于链接中的网址:

  项目 = BchItem()

  res = requests.get('xxx' + url)

  #print res,'endsss'

  res.encoding = 'utf-8'

  

" />

  soup = BeautifulSoup(res.text, “lxml”)

  #print “lxml”,汤

  item['title'] = (soup.select('title')[0].text).strip()

  item['status'] = (soup.select('title')[0].text).strip()

  src = soup.select(“body script”)[11].string #

  打印“脚本”,src

  src_text = js2xml.parse(src, debug=False)

  src_tree = js2xml.pretty_print(src_text)

  打印“src_tree”,src_tree

  选择器 = etree.HTML(src_tree)

  item['link'] = 'xxx' + selector.xpath(“//property[@name = 'f']/string/text()”)[0]

  items.append(item)

  产量项目

  #return项目

  参考:

  汇总:任意网页文章内容提取(采集)算法

  任意网络文章内容抽取(获取)算法

  标签:采集程序开发2014-04-09 19:10 星期三

  做过采集的都知道,采集一个网站,需要根据网站的结构来写规则。这是最传统的方法。这种方法的好处是采集精度可以非常精细,可以采集任何结构的网站。这种方法也非常有限。一套规则只能用于一个网站。当网站结构发生变化时,需要重新分析和调整规则,非常被动。

  我一直在想,如果程序能达到人类的识别水平,那么它就可以采集任何网站的文字内容。在网上搜索了一下,发现已经有很多类似的算法了,主要有以下几种:

  1.基于Dom树

  1) 使用开源包 HTML Tidy 处理 HTML 并纠正错误或不规范;

  2)基于更规范的HTML创建Dom树,然后递归遍历Dom树,比较识别各种非文本信息,包括广告、链接组、非重要节点信息;广告信息去除:需要建立一个经常更新的广告服务器列表;链接组去除:计算网页中收录

的链接数与未链接词数的比值;

  3)去除非文本信息后,Dom树中剩下的内容就是文本信息,直接从剩余的树节点中取出

  点击提取。

  存在问题:Dom树的建立对HTML是否结构良好要求高,树的建立和遍历是时空的

  复杂度高,树的遍历方式也会因HTML标签不同而有所差异。

  2、根据网页切分查找文本块

  1)、网页被正确切分后,文本提取工作简化为文本块的判断;

  2)、切分就是利用HTML标签中的分界线和一些视觉信息(如文字颜色、字体大小、文字信息等)。

  存在问题:不同网站的HTML样式差异很大,没有统一的切分方法,通用性难以保证。

  3.基于标记窗口

  1)、先把文章标题拿出来;

  

" />

  2)、这两个标签和其中收录

的文本一起称为一个标记窗口(例如text in text就是标记窗口中的文本),将标记窗口中的所有文本都取出来;

  3)、文章标题和各标签窗口中的文字分段;

  4) 计算标题序列与每个标签窗口文本序列之间的词距离L,如果L小于阈值,则将标签窗口中的文本视为正文。

  存在问题:tag window的制定很好,但是每个tag window文本都要先切分,计算词序列之间的距离,效率如何?

  4. 基于数据挖掘或机器学习

  用到了文本分类、聚类、隐马模型、数据挖掘等。

  有问题:简单的问题很复杂。

  5. 基于逻辑行和最大接受距离的网页文本提取

  1)、考虑人们写网页时的一些启发式规则,考虑文本的物理位置会很接近;

  2)、做出如下推论:

  每一行 HTML 代表一个完整的语义;

  文本代码将在物理上靠近;

  文本代码中的大部分行都是文本;

  一行文本代码中有很多非HTML标签;

  超链接长度在一行文本代码中所占比例不会很大;

  3)符合上述推论的一行代码被认为是一行文本;

  有一个问题:文字的物理位置确实很近,但是长标题的链接组和长文章的评论信息也满足上述条件。还是靠html标签来做判断。

  6、基于行块分布函数的通用网页文本提取:线性时间,不构建DOM树,与HTML标签无关

  

" />

  首次将网页文本抽取问题转化为寻找页面的行块分布函数。这种方法不需要构建 Dom 树,也没有病态 HTML 的负担(实际上,它与 HTML 标签完全没有关系)。通过线性时间内置的线块分布函数图,直接准确定位网页正文。同时采用统计与规则相结合的方法来处理普适性问题。笔者认为,简单的事情永远要用最简单的方法来解决,这是一个永恒不变的真理。整个算法实现代码不到一百行。但数量不多,就在规律之中。

  项目网址:,/p/cx-extractor/

  以上算法均来自算法六的分析论文。

  第六种算法是我认为最好的算法,效率快,实现简单。但也有缺点。该算法主要针对采集文章,即文本内容较多的网页,因为其原理是对网页进行去标签,然后分块。过程中发现以下问题:

  1.无法采集图片;

  2、会错误的采集

链接聚合块做正文,比如:相关文章,文章攻略,这些地方的标题的正文有时会超过正文;

  3. 没有头衔识别。

  对代码的简单修复可以解决上述问题:

  1.保存图片标签,改用[img=x];

  2.保存链接文本,使用[a=x]代替链接块;

  3.更容易识别标题,可以从标题中获取,然后做一个简单的筛选。

  修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者在论文中也对此进行了解释。

  目前该方案还不完全准确,部分类型的网站还不适用,如相册(纯图片)、影视(线链接)等。

  应用:,/

  网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度上找到类似的网站,但是那些网站不一定是这样做的,也可能是纯粹的关键词积累。

  相信改造后可以实现更精准的匹配,效果会越来越好!

  修复完成,届时分享代码。请大家关注我的博客,拖鞋站(,/),希望和大家一起学习。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线