1. URL

URL的格式由三部分组成:
第一部分是协议(或称为服务方式)。
第二部分是存有该资源的主机IP地址(有时也包括端口号)。
第三部分是主机资源的具体地址,如目录和文件名等。

爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。

关于urllib2包

python 3.X版本是不需要安装urllib2包,urllib和urllib2包集合成在一个包为urllib了.
在python3.x版本中,如何使用:urllib2.urlopen()?

1
2
3
4
5
6
7
8
9
10
import urllib
import urllib.request
response = urllib.request.urlopen("http://www.baidu.com")
print(response.read())
URL = "http://www.baidu.com"
request = urllib.request.Request(URL)
response = urllib.request.urlopen(request)
print(response.read())

POST和GET数据传送

大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。

urlopen一般接受三个参数,它的参数如下:urlopen(url, data, timeout)
第一个参数url即为URL,第二个参数data是访问URL时要传送的数据,第三个timeout是设置超时时间。
第二,三个参数是可以不传送的,data默认为空None,timeout默认为 socket._GLOBAL_DEFAULT_TIMEOUT

POST方式:

1
2
3
4
5
6
7
8
import urllib
values = {"username":"xxxx@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib.request.Request(url, data)
response = urllib.request.urlopen(request)
print(response.read())

GET方式:

至于GET方式我们可以直接把参数写到网址上面,直接构建一个带参数的URL出来即可。

1
2
3
4
5
6
7
8
9
10
11
import urllib
values={}
values['username'] = "xxxx@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values)
url = "http://passport.csdn.net/account/login"
geturl = url + "?" + data
request = urllib.request.Request(geturl)
response = urllib.request.urlopen(request)
print(response.read())

python3中urllib的模块分4个子模块

urllib.request for opening and reading URLs
urllib.error containing the exceptions raised by urllib.request
urllib.parse for parsing URLs
urllib.robotparser for parsing robots.txt files

python3中urllib报错

爬虫过程报错:http.client.RemoteDisconnected: Remote end closed connection without response
利用 urllib 发起的请求,UA 默认是 Python-urllib/3.5 而在 chrome 中访问则 user_agent = ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36’,因为服务器根据 UA 来判断拒绝了 python 爬虫。

在浏览器中可以查看自己浏览器的UA