实例讲解Python爬取网页数据


Posted in Python onJuly 08, 2018

一、利用webbrowser.open()打开一个网站:

>>> import webbrowser 
>>> webbrowser.open('http://i.firefoxchina.cn/?from=worldindex') 
True

实例:使用脚本打开一个网页。

所有Python程序的第一行都应以#!python开头,它告诉计算机想让Python来执行这个程序。(我没带这行试了试,也可以,可能这是一种规范吧)

1.从sys.argv读取命令行参数:打开一个新的文件编辑器窗口,输入下面的代码,将其保存为map.py。

2.读取剪贴板内容:

3.调用webbrowser.open()函数打开外部浏览:

#! python3 
import webbrowser, sys, pyperclip 
if len(sys.argv) > 1: 
 mapAddress = ''.join(sys.argv[1:]) 
else: 
 mapAddress = pyperclip.paste() 
webbrowser.open('http://map.baidu.com/?newmap=1&ie=utf-8&s=s%26wd%3D' + mapAddress

注:不清楚sys.argv用法的,请参考这里;不清楚.join()用法的,请参考这里。sys.argv是字符串的列表,所以将它传递给join()方法返回一个字符串。

好了,现在选中'天安门广场'这几个字并复制,然后到桌面双击你的程序。当然你也可以在命令行找到你的程序,然后输入地点。

二、用requests模块从Web下载文件:requests模块不是Python自带的,通过命令行运行pip install request安装。没翻墙是很难安装成功的,手动安装可以参考这里。

>>> import requests 
>>> res = requests.get('http://i.firefoxchina.cn/?from=worldindex') #向get中传入一个网址 
>>> type(res) #响应对象 
<class 'requests.models.Response'> 
>>> print(res.status_code) #响应码 
200 
>>> res.text #返回的文本

requests中查看网上下载的文件内容的方法还有很多,如果以后的博客用的到,会做说明,在此不再一一介绍。在下载文件的过程中,用raise_for_status()方法可以确保下载确实成功,然后再让程序继续做其他事情。

import requests 
res = requests.get('http://i.firefoxchina.cn/?from=worldindex') 
try: 
 res.raise_for_status() 
except Exception as exc: 
 print('There was a problem: %s' % (exc))

三、将下载的文件保存到本地:

>>> import requests 
>>> res = requests.get('http://tech.firefox.sina.com/17/0820/10/6DKQALVRW5JHGE1I.html##0-tsina-1-13074-397232819ff9a47a7b7e80a40613cfe1') 
>>> res.raise_for_status() 
>>> file = open('1.txt', 'wb') #以写二进制模式打开文件,目的是保存文本中的“Unicode编码” 
>>> for word in res.iter_content(100000): #<span class="fontstyle0"><span class="fontstyle0">iter_content()</span><span class="fontstyle1">方法在循环的每次迭代中返回一段</span><span class="fontstyle0">bytes</span><span class="fontstyle1">数据</span><span class="fontstyle1">类型的内容,你需要指定其包含的字节数</span></span> 
 file.write(word) 
 
 
16997 
>>> file.close()

四、用BeautifulSoup模块解析HTML:在命令行中用pip install beautifulsoup4安装它。
1.bs4.BeautifulSoup()函数可以解析HTML网站链接requests.get(),也可以解析本地保存的HTML文件,直接open()一个本地HTML页面。

>>> import requests, bs4 
>>> res = requests.get('http://i.firefoxchina.cn/?from=worldindex') 
>>> res.raise_for_status() 
>>> soup = bs4.BeautifulSoup(res.text) 
 
Warning (from warnings module): 
 File "C:\Users\King\AppData\Local\Programs\Python\Python36-32\lib\site-packages\beautifulsoup4-4.6.0-py3.6.egg\bs4\__init__.py", line 181 
 markup_type=markup_type)) 
UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("html.parser"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently. 
 
The code that caused this warning is on line 1 of the file <string>. To get rid of this warning, change code that looks like this: 
 
 BeautifulSoup(YOUR_MARKUP}) 
 
to this: 
 
 BeautifulSoup(YOUR_MARKUP, "html.parser") 
 
>>> soup = bs4.BeautifulSoup(res.text, 'html.parser') 
>>> type(soup) 
<class 'bs4.BeautifulSoup'>

我这里有错误提示,所以加了第二个参数。

>>> import bs4 
>>> html = open('C:\\Users\\King\\Desktop\\1.htm') 
>>> exampleSoup = bs4.BeautifulSoup(html) 
>>> exampleSoup = bs4.BeautifulSoup(html, 'html.parser') 
>>> type(exampleSoup) 
<class 'bs4.BeautifulSoup'>

2.用select()方法寻找元素:需传入一个字符串作为CSS“选择器”来取得Web页面相应元素,例如:
soup.select('div'):所有名为<div>的元素;

soup.select('#author'):带有id属性为author的元素;

soup.select('.notice'):所有使用CSS class属性名为notice的元素;

soup.select('div span'):所有在<div>元素之内的<span>元素;

soup.select('input[name]'):所有名为<input>并有一个name属性,其值无所谓的元素;

soup.select('input[type="button"]'):所有名为<input>并有一个type属性,其值为button的元素。

想查看更多的解析器,请参看这里。

>>> import requests, bs4 
>>> res = requests.get('http://i.firefoxchina.cn/?from=worldindex') 
>>> res.raise_for_status() 
>>> soup = bs4.BeautifulSoup(res.text, 'html.parser') 
>>> author = soup.select('#author') 
>>> print(author) 
[] 
>>> type(author) 
<class 'list'> 
>>> link = soup.select('link ') 
>>> print(link) 
[<link href="css/mozMainStyle-min.css?v=20170705" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css"/>, <link href="" id=" rel="external nofollow" rel="external nofollow" rel="external nofollow" moz-skin" rel="stylesheet" type="text/css"/>, <link href="" id=" rel="external nofollow" rel="external nofollow" rel="external nofollow" moz-dir" rel="stylesheet" type="text/css"/>, <link href="" id=" rel="external nofollow" rel="external nofollow" rel="external nofollow" moz-ver" rel="stylesheet" type="text/css"/>] 
>>> type(link) 
<class 'list'> 
>>> len(link) 
4 
>>> type(link[0]) 
<class 'bs4.element.Tag'> 
>>> link[0] 
<link href="css/mozMainStyle-min.css?v=20170705" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css"/> 
>>> link[0].attrs 
{'rel': ['stylesheet'], 'type': 'text/css', 'href': 'css/mozMainStyle-min.css?v=20170705'}

 3.通过元素的属性获取数据:接着上面的代码写。

>>> link[0].get('href') 
'css/mozMainStyle-min.css?v=20170705

上面这些方法也算是对“网络爬虫”的一些初探。

Python 相关文章推荐
Python文件操作类操作实例详解
Jul 11 Python
用python读写excel的方法
Nov 18 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
Python httplib模块使用实例
Apr 11 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
python executemany的使用及注意事项
Mar 13 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
机器学习经典算法-logistic回归代码详解
Dec 22 Python
浅述python2与python3的简单区别
Sep 19 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
python删除文件、清空目录的实现方法
Sep 23 Python
python十进制和二进制的转换方法(含浮点数)
Jul 07 #Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 #Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 #Python
python3 kmp 字符串匹配的方法
Jul 07 #Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 #Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 #Python
python求最大连续子数组的和
Jul 07 #Python
You might like
在字符串中把网址改成超级链接
2006/10/09 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Python中的面向对象编程详解(下)
2015/04/13 Python
Python 的内置字符串方法小结
2016/03/15 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
Django中提示消息messages的设置方式
2019/11/15 Python
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
UNIX文件系统常用命令
2012/05/25 面试题
4s店总经理岗位职责
2013/12/31 职场文书
《散步》教学反思
2014/03/02 职场文书
农村党员一句话承诺
2014/05/30 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
青岛导游词
2015/02/12 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
Python采集股票数据并制作可视化柱状图
2022/04/04 Python