c爬虫抓取网页数据(soup(爬虫)隐形条约下的DOM结构,常伴吾身)

优采云 发布时间: 2022-03-06 02:08

  c爬虫抓取网页数据(soup(爬虫)隐形条约下的DOM结构,常伴吾身)

  爬行动物就像风,一直陪伴着我……

  在日常的折腾中,无论是我的网站被别人爬取,还是别人的网站被我爬取,这就像一个游戏过程。双方在“隐形条约”下完成了各自的任务。正所谓君子之情如水,我不知道他是谁,他也不知道我是谁。我们互相提供他们需要的信息。或许这种关系更像是江湖,纯洁的江湖,不是说盈盈嫣嫣和世界。只谈江上轻舟饮酒,竹林歌声。说完,双方收剑离开,没有人啰嗦一句:“谁来?报名就来。”

  爬虫的一个重要部分是数据处理。虽然静态加载的网页结构千差万别,界面看起来也不一样,但是爬取的数据是单一的,都是DOM结构的“后代”。即使你明白过滤数据的本质是处理字符串,但处理它的方法是无穷无尽的。以下是根据不同网页风格对症下药。

  一:《好孩子》网页

  特点:有完整的DOM结构,虽然有时会使用“混乱”的编码,例如:gb2312等,但其本质仍然是“好孩子”。

  示例网址:百度搜索广告牌

  分析:看源码,不难看出Billboard的新闻格式是

  子节点,而我们需要的部分正是子节点标签。a标签的属性类是“list-title”。

  像这样的网页是典型的“好孩子”网页,具有良好的可视化 DOM 结构,所需的信息来自同一个结构,解析起来并不费力。

  分析方法:

  1.使用BeautifulSoup

  部分代码如下:

  从 bs4 导入 BeautifulSoup 作为汤

  source_code = "..." #你得到的网页的源代码

  汤域 = 汤(源代码,'lxml')

  all_a = soup_dom.find_all('a',attrs={'class':'list-title'})

  对于 all_a 中的 a:

  href_title = {'href':a.get('href'),'title':a.text}

  结果如下:

  2、使用xpath方法解析

  部分代码如下:

  从 lxml 导入 etree

  source_code = "..." #你得到的网页的源代码

  all_a = etree.Html(source_code).xpath("//a[@class='list-title']")

  对于 all_a 中的 a:

  href_title = {'href':a.attrib['href'],'title':a.text}

  打印(href_title)

  结果如下:

  从以上两种方法可以看出,可以使用bs4或者Xpath来获取“好孩子”网页的数据。毕竟管教“好孩子”的成本远低于管教“坏孩子”的成本,所以大家都喜欢好孩子。

  二:“坏小子”网页

  特点:大部分是古代(2010年之前)的页面,DOM乱七八糟。(有些网页甚至只有一个封闭标签,其余的都是由

  标签被拆分,甚至使用虚假的 API 页面来“冒充”真实的 API。)

  但是:这些网址大多是丹尼尔博主,不拘一格,当你找到它们时,就像在悬崖下发现秘密一样!

  示例网址:清华大学Penny Hot于2003年编写的linuxc教程~yhf/linux_c/

  分析:如果能用简单的方法,就用简单的方法,如果不能用常规的方法

  我要再次感谢 PennyHot 组织了我在 2003 年获得的 Linux C 文档,以方便您使用!

  解决方法:使用正则

  示例代码:

  重新*敏*感*词*

  source_code = "..." #你得到的网页的源代码

  compile = pile("[\u4e00-\u9fa5]*") #匹配尽可能多的中文

  find_all = compile.findall(source_code)

  对于我在 find_all 中:

  如果我!=””:

  打印(一)

  结果如下:

  总结:没有好方法,只要能拿到自己需要的数据,就是好方法。

  最后,感谢为互联网后来者做出贡献的先辈们。尽管很多人做着普通的工作,但他们留下的东西就像宝藏一样,藏宝图隐藏在互联网的每一个角落。让我自强!

  2020.3.19 维科斯

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线