登录  | 加入社区

黑狼游客您好!登录后享受更多精彩

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

查看: 602|回复: 0

技能分享|使用Python和BeautifulSoup举行网页爬取(新手教程) ...

[复制链接]

395

主题

8

帖子

0

现金

黑狼菜鸟

Rank: 1

积分
0
发表于 2018-10-10 16:25:02 | 显示全部楼层 |阅读模式 来自 江苏徐州
aEEybmIpvk0EjRPX.jpg 数据观天下

在大数据、人工智能期间,我们通常必要从网站中网络我们所需的数据,网络信息的爬取技能已经成为多个行业所需的技能之一。而Python则是现在数据科学项目中最常用的编程语言之一。利用Python与BeautifulSoup可以很轻易的举行网页爬取,通过网站爬虫获取信息可以资助企业或个人节流许多的时间和款项。学习本文之后,我信赖大部门新手都能根据本身的需求来开辟出相应的网页爬虫。
k0y88B7vIr14di1B.jpg

底子条件


  • 相识简朴的Python编程规则(Python 3.x)
  • 相识简朴的网页Html标签
假如您是完全的新手也不消担心,通过本文您可以很轻易地明白。
安装所需包

起首,您必要先安装好Python 3.x,Python安装包可以从python.org下载,然后我们必要安装requests和beautifulsoup4两个包,安装代码如下:
$ pip install requests
$ pip install beautifulsoup4
爬取网页数据

如今我们已经做好了统统预备工作。在本教程中,我们将演示从没被墙的维基百科英文版页面中获取历届美国总统名单。
转到此链接(http://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States#Presidents)并右键单击包罗有关美国总统的全部信息的表格,然后单击"查抄"选项(我用的是Chrome欣赏器,其他欣赏器右键单击页面后也会具有雷同或雷同的选项)。
GGFWOgF3BA9f3kWW.jpg

由下图可知,表格的内容位于class属性为wikitable的table标签下,我们必要相识这些标签信息来获取我们所需内容。
sR3Jj7sJ73hS0hXZ.jpg

相识网页信息之后,我们就可以编写代码了。起首,我们要导入我们安装的包:
import requests
from bs4 import BeautifulSoup
为了获取网页数据我们要利用requests的get()方法:
url = "http://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"
page = requests.get(url)
查抄http相应状态,来确保我们能正常获取网页,假如输出状态代码为200则为正常:
print(page.status_code)
如今我们已经获取了网页数据,让我们看看我们得到了什么:
print(page.content)
上面的代码会表现http相应的全部内容,包罗html代码和我们必要的文本数据信息。通过利用beautifulsoup的prettify()方法可以将其更雅观的展示出来:
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())
这会将数据按照我们上面"查抄"中看到的代码情势展示出来:
w12VGwwaIk5z1l5m.jpg

现在得到的是包罗我们所需数据的网页源码,我们接下来要将有效的信息提取出来。上面已经知道我们所需的内容在class属性为wikitable的table标签下,因此,接下来我们将利用bs4对象的find方法提取table标签中的数据,此方法返回bs4对象:
tb = soup.find('table', class_='wikitable')
table标签下有许多嵌套标签,通过网页查抄中的代码可以发现,我们终极是必要得到title元素中的文本数据,而title元素位于a标签下,a标签位于b标签下,b标签位于table标签下。为了获取全部我们所需的数据,我们必要提取table标签下的全部b标签,然后找到b标签下的全部a标签,为此,我们利用find_all方法来迭代获取全部b标签下的a标签:
for link in tb.find_all('b'):
name = link.find('a')
print(name)
这将获取全部a标签下的数据:
mRIs0q0eEiQR108K.jpg

可以看出,这并不是我们所要的终极效果,此中掺杂着html代码,不消担心,我们只需为上面的代码添加get_text()方法,即可提取出全部a标签下title元素的文本信息,代码改动如下:
for link in tb.find_all('b'):
name = link.find('a')
print(name.get_text('title'))
终极得到全部总统的名单如下:
George Washington
John Adams
Thomas Jefferson
James Monroe
...
...
Barack Obama
Donald Trump
将Python代码归并在一起:
import requests
from bs4 import BeautifulSoup
url = "http://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
tb = soup.find('table', class_='wikitable')
for link in tb.find_all('b'):
name = link.find('a')
print(name.get_text('title'))
仅仅9行代码,我们就实现了网页信息的爬取,我信赖您从中已经学到了Python、html的底子知识,而且已经懂得了网页爬虫的根本原理,假如想更深入的学习网页爬虫,你可以实验对以上代码举行改进,实验爬取更多的网站,接待与我留言交换。




上一篇:Python视频教程带你轻松入门编程(干货)
下一篇:Python教程:利用Python辨认简朴验证码
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

 

QQ|申请友链|小黑屋|手机版|Hlshell Inc. ( 豫ICP备16002110号-5 )

GMT+8, 2024-5-20 01:36 , Processed in 0.053439 second(s), 47 queries .

HLShell有权修改版权声明内容,如有任何爭議,HLShell將保留最終決定權!

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表