📜  BeautifulSoup – 仅解析文档的一部分

📅  最后修改于: 2022-05-13 01:55:42.261000             🧑  作者: Mango

BeautifulSoup – 仅解析文档的一部分

BeautifulSoup是一个Python模块,用于从抓取的网站中查找特定的网站内容/标签,可以通过任何模块(如requestsscrapy )抓取。请记住,BeautifulSoup 不会抓取网站,而是以可读的形式处理和显示其他模块抓取的内容。因此,要了解我们如何抓取网站上的数据,我们将通过示例来理解。

需要的模块

首先,我们需要在我们的计算机上安装所有这些模块。

  • BeautifulSoup:我们的主要模块包含一个通过 HTTP 访问网页的方法。
pip install bs4
  • lxml:用Python语言处理网页的助手库。
pip install lxml
  • 请求:使发送 HTTP 请求的过程完美无缺。函数的输出
pip install requests

让我们从抓取示例网站开始,看看如何只抓取页面的一部分。

第 1 步:我们导入 beautifulsoup 模块和请求。我们声明了 Header 并添加了一个用户代理。这确保了我们要抓取的目标网站不会将来自我们程序的流量视为垃圾邮件,并最终被它们阻止。

Python3
from bs4 import BeautifulSoup,SoupStrainer 
import requests 
  
URL = "https://en.wikipedia.org/wiki/Nike,_Inc."
  
HEADERS = ({'User-Agent': 
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36\
        (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
            'Accept-Language': 'en-US, en;q=0.5'}) 
  
webpage = requests.get(URL, headers= HEADERS)


Python3
soup = BeautifulSoup(webpage.content, "lxml",
                     parse_only = SoupStrainer(
                       'span', class_ = 'mw-headline'))
  
print(soup.prettify())


Python3
from bs4 import BeautifulSoup,SoupStrainer 
import requests 
  
  
URL = "https://en.wikipedia.org/wiki/Nike,_Inc."
  
HEADERS = ({'User-Agent': 
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
        (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
            'Accept-Language': 'en-US, en;q=0.5'}) 
  
webpage = requests.get(URL, headers= HEADERS) 
soup = BeautifulSoup(webpage.content, "lxml", 
                     parse_only = SoupStrainer(
                       'span', class_ = 'mw-headline'))
  
print(soup.prettify())


第 2 步:现在我们使用我们在第一行导入的SoupStrainer来过滤掉我们需要的网站部分。请注意,如果我们根据元素的 id 过滤掉元素,则类后面的下划线将不存在。在这种情况下,我们只想解析具有“mw-headline”类属性的元素。最后一行以漂亮的方式打印解析的内容。

SoupStrainer类告诉我们提取哪一部分,解析树只包含这些元素。我们只需要将 SoupStrainer 对象作为parse_only参数传递给 BeautifulSoup 构造函数。

蟒蛇3

soup = BeautifulSoup(webpage.content, "lxml",
                     parse_only = SoupStrainer(
                       'span', class_ = 'mw-headline'))
  
print(soup.prettify())

完整代码:

蟒蛇3

from bs4 import BeautifulSoup,SoupStrainer 
import requests 
  
  
URL = "https://en.wikipedia.org/wiki/Nike,_Inc."
  
HEADERS = ({'User-Agent': 
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \
        (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
            'Accept-Language': 'en-US, en;q=0.5'}) 
  
webpage = requests.get(URL, headers= HEADERS) 
soup = BeautifulSoup(webpage.content, "lxml", 
                     parse_only = SoupStrainer(
                       'span', class_ = 'mw-headline'))
  
print(soup.prettify())

输出:

bs4 汤过滤器