浏览器抓取网页(1.开发环境.3.3python3.52.网络爬虫的定义)
优采云 发布时间: 2022-03-28 06:14浏览器抓取网页(1.开发环境.3.3python3.52.网络爬虫的定义)
1.开发环境
pycharm2017.3.3
蟒蛇3.5
2.网络爬虫的定义
网络爬虫,又称网络蜘蛛,如果把互联网比作蜘蛛网,蜘蛛就是在网络上四处爬行的蜘蛛。网络爬虫根据其地址搜索网页。是网址。举个简单的例子,我们在浏览器地址栏中输入的字符串就是URL,例如:
URL为统一资源定位符(统一资源定位),其一般格式如下(方括号[]可选)
protocol://hostname[:port]/path/[:parameters][?query]#fragment
URL的格式由三部分组成:
(1)protocol:第一部分是协议,比如百度使用的是https协议;
(2)hostname[:port]:第二部分是主机名(和端口号作为可选参数),一般网站默认端口号为80
(3)path:第三部分是宿主资源的具体地址,如目录和文件名等,网络爬虫就是根据这个URL获取网页信息
3.简单爬虫示例
在Python3.x中,我们可以使用urllib组件来抓取网页。 urllib 是一个 URL 处理包。这个包采集了处理url的模块,如下:
(1)urllib.request模块用于打开和读取URL;
(2)urllib.error 模块收录一些urllib.request 产生的错误,可以用try 捕获
(3)urllib.parse模块收录一些解析URL的方法;
(4)urllib.robotparser模块用于解析robots.txt文本文件,提供了单独的RobotFileParser类,通过该类提供的can_fatch()方法测试爬虫能否下载页面.
我们可以通过接口函数urllib.request.urlopen()轻松打开一个网站,读取和打印信息
让我们编写一个简单的程序来实现它
1 from urllib import request
2 if __name__ == "__main__":
3 response = request.urlopen("http://www.baidu.com")
4 html = response.read()
5 print(html)
运行结果(可以看到进度条还是可以拉远的)
这到底是怎么回事
为了对比,在浏览器中打开,查看页面元素,使用快捷键F12(浏览器最好使用Firefox或Chrome)
一切都一样,只是格式有点乱。您可以通过简单的 decode() 命令解码并显示网页的信息。代码中加一句html=html.decode("utf-8")
1 from urllib import request
2
3 if __name__ == "__main__":
4 response = request.urlopen("http://www.fanyi.baidu.com/")
5 html = response.read()
6 html = html.decode("utf-8")
7 print(html)
输出普通html格式
当然,编码方式不是我们猜到的,而是发现了。在查看元素中找到head标签,打开,看到charset="utf-8",就是编码方式
4.自动获取网页的编码方式
这里使用第三方库来安装chardet
1 pip install chardet
对代码稍作修改,确定页面的编码方式
1 from urllib import request
2 import chardet
3 if __name__ == "__main__":
4 response = request.urlopen("http://www.baidu.com")
5 html = response.read()
6 #html = html.decode("utf-8")
7 charset = chardet.detect(html)
8 print(charset)
可以看到字典返回了,终于可以整合了
1 from urllib import request
2 import chardet
3 if __name__ == "__main__":
4 response = request.urlopen("http://www.baidu.com")
5 html = response.read()
6 charset = chardet.detect(html)
7 html = html.decode(charset.get('encoding'))
8
9 print(html)
完美
转载于: