c爬虫抓取网页数据(soup(爬虫)隐形条约下的DOM结构,常伴吾身)
优采云 发布时间: 2022-03-06 02:08c爬虫抓取网页数据(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 维科斯