一、Python如何访问互联网

采用urllib包来访问

二、理论

1、请问URL是“统一资源标识符”还是“统一资源定位符”

URI是统一资源标识符,URL是统一资源定位符。即:URI是用字符串表示某一互联网资源,URL是用字符循环表示资源的地址,因此URI是父类,URL是子类

2、urllib.request.urlopen()返回的是什么类型的数据


import urllib.request
url = "https://ilovefishc.com"
response = urllib.request.urlopen(url).read()
a = response.decode("utf-8")
print(a)

3、当目标网站使用的是自签名的证书时就会抛出错误:urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

#解决办法:导入import ssl   和 ssl._create_default_https_context = ssl._create_unverified_context

import urllib.request
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://ilovefishc.com"
response = urllib.request.urlopen(url).read()
a = response.decode("utf-8")
print(a)

4、下载https://fishc.com.cn/首页,并打印前300个字节

import urllib.request
import ssl
import chardet
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://fishc.com.cn/"
response = urllib.request.urlopen(url).read()
#chardet.detect(response)
print(response.decode("charmap","ignore"))

只是扩展:如果不知道网站采用的是什么编码格式,如何解决

方法:

1)、安装chardet模块:pip install

2)、导入:>>import chardet

3)、输入:>>chardet.detect(response)

  >> {'confidence': 0.99, 'encoding': 'GB2312'}

4)、如果输出的是:GB2312

5)、采用:>>

if chardet.detect(response)['encoding'] == 'GB2312':

    response.decode('GBK')

In [1]: import urllib.request

In [2]: import ssl

In [3]: ssl._create_default_https_context = ssl._create_unverified_context

In [4]: url = "https://fishc.com.cn/"

In [5]: response = urllib.request.urlopen(url).read()

In [6]: import chardet

In [7]: chardet.detect(response)
Out[7]:
{'encoding': 'Windows-1254',
'confidence': 0.45397661418528873,
'language': 'Turkish'} #################################
#知道了编码格式是:Windows-1254',则进行后续代码编写
import urllib.request
import ssl
import chardet
ssl._create_default_https_context = ssl._create_unverified_context
url = "https://fishc.com.cn/"
response = urllib.request.urlopen(url).read()
#chardet.detect(response)
print(response.decode("charmap","ignore"))

5、写一个程序,依次访问文件中指定的站点,并将每个站点返回的内容依次存放到不同的文件中

import urllib.request
import chardet def main():
#初始化一个文件名的递增数字
i = 0 #读取url.txt文件内的每一行
with open('url.txt',"r") as f:
#每一行是一个URL,所以按换行符'\n'分隔
url = f.read().splitlines() #打开url地址
for each_url in url:
responsed = urllib.request.urlopen(each_url).read() #识别网页编码
encode = chardet.detect(responsed)['encoding']
if encode =='GB2312':
encode = 'GBK'
if encode == 'gbk':
encode = 'charmap' i +=1
filename = "url_%d.txt"%i with open(filename,"w",encoding=encode) as each_file:
each_file.write(responsed.decode(encode,"ignore")) if __name__ == '__main__':
main()

【Python52--爬虫1】的更多相关文章

  1. 设计爬虫Hawk背后的故事

    本文写于圣诞节北京下午慵懒的午后.本文偏技术向,不过应该大部分人能看懂. 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk.我花不少时间优化和推广它,得到的评价还算比较 ...

  2. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  3. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  4. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  5. scrapy 知乎用户信息爬虫

    zhihu_spider 此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo,下载这些数据感觉也没什么用,就当为大家学习scrapy提供一个例子吧.代码地 ...

  6. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  7. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  8. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

  9. QQ空间动态爬虫

    作者:虚静 链接:https://zhuanlan.zhihu.com/p/24656161 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 先说明几件事: 题目的意 ...

  10. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

随机推荐

  1. 30.get和post的区别

    POST和GET的区别 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个 ...

  2. CSU 1857 Crash and Go(relians)(模拟)

    Crash and Go(relians) [题目链接]Crash and Go(relians) [题目类型]模拟 &题解: 这就是要严格的按照题意说的模拟就好了,也就是:每次添加进来一个圆 ...

  3. Django配置xadmin后台模板之坑(一)

    环境: Python3.6 + Django2.0 + xadmin2.0 一.安装 1.首先安装就会有一个坑,很多教程的安装是直接在虚拟环境下使用 pip install xadmin 或者 pip ...

  4. Python记录7:函数3,函数对象

    #函数对象指的是:函数的内存地址可以像变量值一样去使用,如何使用?def func(): print('from func')#1. 可以被引用# f=func# print(f)# f() #2. ...

  5. 水题 K

    输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数.注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数. Input输入包括4行由大写字母组成的文本, ...

  6. 水题 J

    一张CT扫描的灰度图像可以用一个N*N(0 < N <= 100)的矩阵描述,矩阵上的每个点对应一个灰度值(整数),其取值范围是0-255.我们假设给定的图像中有且只有一个肿瘤.在图上监测 ...

  7. c++ 常用的数据结构

    set // constructing sets #include <iostream> #include <set> void checkin(std::set<int ...

  8. MATLAB中文件的读写和数据的导入导出

    http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行 ...

  9. C/C++笔试题(基础题)

    为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...

  10. C# 选项卡控件

    选项卡控件,它提供一系列操作按钮,单击不同的按钮可以在各个页面之间进行切换. 在Windows Form应用程序中,选项卡控件即“TebPage”控件,它公开“TebPage”属性,表示一个由“Tab ...