技术文章:爬虫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.更容易识别标题,可以从标题中获取,然后做一个简单的筛选。
修改后的程序匹配结果比原算法准确很多,还有很大的调整空间。作者在论文中也对此进行了解释。
目前该方案还不完全准确,部分类型的网站还不适用,如相册(纯图片)、影视(线链接)等。
应用:,/
网站内容有点乱,基本不能用,还是垃圾网站。相信有的朋友会在百度上找到类似的网站,但是那些网站不一定是这样做的,也可能是纯粹的关键词积累。
相信改造后可以实现更精准的匹配,效果会越来越好!
修复完成,届时分享代码。请大家关注我的博客,拖鞋站(,/),希望和大家一起学习。