抓取网页数据违法吗(soupDOMTREE方法(二):用BeautifulSoup的数据转化为结构化)
优采云 发布时间: 2022-01-07 06:04抓取网页数据违法吗(soupDOMTREE方法(二):用BeautifulSoup的数据转化为结构化)
我们抓取的网页是UTF8,但是python请求的时候误判为不知道是什么编码,所以显示这个编码为默认编码:ISO-8859-1
*敏*感*词*请求
response = requests.get('#39;)
打印(响应。编码)
显示的结果是ISO-8859-1,所以我们要告诉python我们遇到的网页是utf8,下面的代码改进如下,我们可以得到一个简体中文的内容:
*敏*感*词*请求
response = requests.get('#39;)
response.encoding ='utf-8'
打印(响应。文本)
现在我们还有一个问题,如何将上述非结构化数据转化为结构化数据?—DOM 树方法
(二) 使用 BeautifulSoup 解析网页
1.基础铺路-DOM TREE
全称:Document Object Model Tree,是一组可以与网页元素进行交互的API。使用BeautifulSoup可以将网页变成DOM树,我们可以根据DOM树的节点进行操作。
在上面的例子中,最外层的结构是html,它是最上层的节点,下层是body,它收录两个链接,h1和a。这些构成了DOM Tree架构,我们可以在这个架构下遵循一定的结构。当这些节点交互时,我们可以得到h1中的词和a中的词。这时候我们就可以顺利的提取数据了;
2.BeautifulSoup 示例
将网页读入 BeautifulSoup
从 bs4 导入 BeautifulSoup
html_sample ='\
\
你好世界 \
\
\
\
'
汤 = BeautifulSoup(html_sample)
打印(汤.文本)
此处将显示警告消息。警告消息告诉我们这段代码没有使用我们的解析器。这时候python会为我们预测一个解析器。如果我们想避免这种警告,我们可以在代码中指定
汤 = BeautifulSoup(html_sample,'html.parser')
3.查找所有带有特定标签的 HTML 元素
另外要考虑的是,即使我们可以使用BeautifulSoup去除标签,有时我们想要抓取的一些内容仍然在特殊标签中。我们如何获取节点中的特殊标签和数据?
使用 select 查找收录 h1 标签的元素
汤 = BeautifulSoup(html_sample)
标题 = 汤.select('h1')
打印(标题)
使用 select 查找收录 a 标签的元素
汤 = BeautifulSoup(html_sample)
alink = 汤.select('a')
打印(链接)
下面我们来实践一下:
从 bs4 导入 BeautifulSoup
html_sample ='\
\
你好世界 \
\
\
\
'
汤 = BeautifulSoup(html_sample,'html.parser')
标题 = 汤.select('h1')
打印(标题)
显示的结果是:
如何进一步解开以上文字?添加[0],可以去掉括号,添加.text取出里面的文字
打印(标题[0]。文本)
4.获取具有特定 CSS 属性的元素
除了标签,我们如何获取特定元素?我们可以通过CSS的属性来获取里面的元素。CSS 是网页的“化妆师”。通过这位化妆师,我们可以美化网页
(1)如何抓取独立独特的元素,可以加id装饰
使用select查找所有id为title的元素(id前面需要#)
alink = soup.select('#title')
打印(链接)
(2)如果要捕捉重复的元素,可以添加类修饰
使用 select 查找所有类为链接的元素(在类之前添加。)
汤 = BeautifulSoup(html_sample)
对于soup.select('.link') 中的链接:
打印(链接)
5.获取具有特定 CSS 属性的元素
在网页的连接中,我们会使用一个标签来连接不同的网页,一个标签有一个属性叫做href,我们可以通过这个属性连接到不同的网页;
使用 select 查找标签的所有 href 链接
alinks = 汤.select('a')
对于 alinks 中的链接:
打印(链接['href'])