浏览器抓取网页(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)

  

  完美

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线