在当今信息爆炸的时代,数据成为了对抗世界的重要武器。无论是在数据科学项目中训练机器学习模型,还是在日常生活中获取信息,数据的需求都在不断增长。网络爬虫作为一种基础技术,能够从网站中提取所需的有用数据。尽管网站结构复杂多变,但Python中有一些出色的库可以帮助轻松地从动态或静态网站中提取数据,如BeautifulSoup、Scrapy和Selenium等。
BeautifulSoup是一个Python库,用于从HTML、XML以及其他标记语言中提取数据。当打开一个网站,发现有很多需要的数据,但网站提供商没有提供下载数据的方式时,BeautifulSoup可以帮助提取页面上的特定内容。只需要去除HTML内容,只保留所需的数据。它是一个网络爬虫工具,帮助清理和解析从网络上抓取下来的文档。
在编写代码时,经常会遇到各种错误,这些错误有其类型。同样,当使用BeautifulSoup进行网站内容抓取时,也会遇到一些异常,它们有多种类型。
如果在编写网络爬虫脚本时提供了错误的URL,就会发生URL异常。简而言之,当请求错误的网站时,就会触发这种异常。如果编译器中出现异常,通常会显示服务器未找到错误。
import requests
from urllib.error import URLError
link = 'https://www.amaz.in/s/ref=nb_sb_ss_ts-doa-p_3_3?url=search-alias%3Daps&field-keywords=basketball&sprefix=bas%2Caps%2C458&crid=3STPJQX67B7GD'
try:
response = requests.get(link)
except URLError as url_error:
print("服务器未找到")
else:
print("没有错误")
在上面的程序输出中,提供的链接对服务器来说是有效的,所以不会有URL错误。如果提供错误的链接给服务器,会发生什么呢?
当在某个地方遇到问题,周围没有人时,情况会变得很糟糕。类似地,如果提供了一个服务器上不存在的链接或URL,就会陷入错误。简而言之,如果在请求服务器时提供了错误的链接,然后执行它,就会显示错误或异常,即页面未找到。
import requests
from urllib.error import HTTPError
url = 'http://pythonscraping.com/blog/second-edition-changes'
try:
response = requests.get(url)
except HTTPError as http_error:
print(http_error)
else:
print("运行正常")
如所见,提供的链接是正确的,程序运行正常,没有异常发生。现在,如果改变链接,会发生什么呢?
这是在编写脚本时经常遇到的一个通用异常,但可能并不了解它。BeautifulSoup的功能之一是可以轻松地将任何文档解析成HTML格式,这样更容易阅读。在编写脚本时,如果遇到这个错误,不要害怕,它可以通过使用BeautifulSoup来克服。
soup = BeautifulSoup(response, 'xml-xml')
# 或者
soup = BeautifulSoup(response, 'xml')
import requests
import bs4
link = 'https://pythonscraping.com/blog/second-edition-changes'
response = requests.get(link)
soup = bs4.BeautifulSoup(response.text,'xml')
result = soup.find('div',class_='不存在于HTML文档中的类')
print(result)