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())