如何在Python中构建一个简单的Scraper


2018-11-04 09:01:52

1541328505817446.jpg


拥有一个包含您需要分析的数据的网站是很常见的,但通常网站以HTML格式呈现数据,这可能难以使用。如果数据集很小,手动复制和粘贴到电子表格中可能会有效,但是对于更大量的数据使用相同的技术将会非常令人沮丧和耗时。


从任何网站提取信息的首选方法是使用API。大多数大型网站都通过API提供对其信息的访问,但对于其他网站并非总是如此。这是刮刮的地方进来。


Web抓取是一种自动化技术,用于抓取网站并从中提取内容。但在讨论技术方面之前,我需要提一下,抓取网站必须遵守网站的条款和条件以及合法使用数据。


为何选择Python?

我选择Python作为本教程,因为它易于使用和丰富的生态系统。有许多库可用于抓取目的,但我将使用“BeautifulSoup”作为解析器,使用“urllib”作为URL抓取器,引导您完成实现Web爬虫的最简单方法。


检查页面

网站翻译


构建一个爬虫将是一个适应性强的过程,需要考虑布局修改和网站结构,这不是一次性任务。


我选择了语家翻译网站作为我爬虫的信息来源。当您检查下面屏幕截图中显示的HTML代码时,结果是具有所有博客信息的Div是

,并且每个博客项目都在

  • 下。


代码


让我们首先导入我们将用于此任务的库。


#import libraries 从urs import BeautifulSoup


导入urllib.request作为ur


由于语家翻译网站有很多页面,因此最好提示要抓取多少页面来保持最小化。如果您不想在任何网站上过于激进,这可能会让您被禁止为垃圾邮件发送者,这是一个不错的选择。


max = input(“你要抓取多少页?”)


计数= 1


而count


url ='/ transnslation-blog.aspx?page ='+ str(count)


data = ur.urlopen(url).read()


汤= BeautifulSoup(数据,'html.parser')


items = soup.find_all('dl',attrs = {'class':'blogItem'})


对于项目中的项目:


print(“Blog URL:”,item.find(“a”)。get_text())


print(“Blog Title:”,item.find(“a”)。get(“href”))


print(“Blog Date:”,item.find(“span”,attrs = {'class':'date'})。get_text())


count + = 1

如何在Python中构建一个简单的Scraper


一旦我们需要抓取大量的博客页面,内容检索将变得简单。这将检索博客URL,标题和发布日期并将其打印到您的控制台。在实际情况中,您可能有兴趣将数据转换为结构良好的更表格格式,可能会使用Pandas DataFrame。


DataFrame是以表格格式存储数据的对象,便于数据分析。


以下是最终代码的外观:


将pandas导入为pd


将urllib.request导入为ur


来自bs4进口BeautifulSoup


max = input(“你要刮多少页?”)


计数= 1


记录= []


而count


url ='/ transnslation-blog.aspx?page ='+ str(count)


data = ur.urlopen(url).read()


汤= BeautifulSoup(数据,'html.parser')


items = soup.find_all('dl',attrs = {'class':'blogItem'})


对于项目中的项目:


blogurl = item.find(“a”)。get_text()


title = item.find(“a”)。get(“href”)


bDate = item.find(“span”,attrs = {'class':'date'})。get_text()


records.append((bDate,title,blogurl))


count + = 1


df = pd.DataFrame(records,columns = ['date','title','url'])


df.to_csv('gpiblogs.csv',index = False,encoding ='utf-8')


以下是输出文件的预览:

网站抓取


摘要


在Python中构建Web scraper相对容易,可以通过几行代码完成。但是,网络抓取通常是一种脆弱的方法。如果与具有静态信息HTML标记属性的结构良好的网页一起使用,则它是可靠的。API(如果由网站提供)是首选方法,因为它们不太可能破坏。