抓取网页数据违法吗(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'])

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线