Python 中的 Web Scraping(使用 BeautifulSoup)
在执行数据科学任务时,通常希望使用互联网上的数据。你通常可以通过应用程序编程接口(API)或其他格式访问此数据。但是,有时你想要的数据只能作为网页的一部分进行访问。在这种情况下,一种称为网络抓取的技术应运而生。
要应用此技术从网页获取数据,我们需要掌握网页结构和网页开发中使用的标签的基本知识(即 <html>
,<li>
,<div>
等)。如果你不熟悉 Web 开发,可以在此处学习。
因此,从网页报废开始,我们将使用一个简单的网站 。我们将使用 requests
模块来获取网页内容或源代码。
import requests
page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html")
print (page.content) ## shows the source code
现在我们将使用 bs4 模块来废弃内容以获取有用的数据。
from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify()) ##shows source in html format
你可以在浏览器中使用 inspect element
工具找到所需的标签。现在假设你要获取与 <li>
标签一起存储的所有数据。然后你可以使用脚本找到它
soup.find_all('li')
# you can also find all the list items with class='ABC'
# soup.find_all('p', class_='ABC')
# OR all elements with class='ABC'
# soup.find_all(class_="ABC")
# OR all the elements with class='ABC'
# soup.find_all(id="XYZ")
然后,你可以使用标记获取文本
for i in range(len(soup.find_all('li'))):
print (soup.find_all('li')[i].get_text())
整个脚本很小很简单。
import requests
from bs4 import BeautifulSoup
page = requests.get("http://dataquestio.github.io/web-scraping-pages/simple.html") #get the page
soup = BeautifulSoup(page.content, 'html.parser') # parse according to html
soup.find_all('li') #find required tags
for i in range(len(soup.find_all('li'))):
print (soup.find_all('li')[i].get_text())