爬虫

1.准备工作:

urllib库:

pip install beautifulsoup4

pip install reguests

pip install selenium

2.专用词理解:

href:链接,一种URL。一般是<a>标准

3.正则表达式:import re

a.正则表达式是一种特殊的字符序列,方便检索一个字符串与某种模式匹配

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

通过某种模式与现有的字符串进行匹配

B.re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

1 line="Cats are smart than dogs"
2 
3 matchobj=re.match(r'(.*) are (.*)',line ,re.M|re.I)
4 #在这里进行匹配,进行首字母匹配。
re.search('www', 'www.runoob.com').span()
 

4.对URLlib库的基础认识:

1 import re
2 response = urllib2.urlopen("http://www.baidu.com")
3 print reponse.read()

首先我们调用的是urllib2库里面的urlopen方法,传入一个URL,这个网址是百度首页,协议是HTTP协议,当然你也可以把HTTP换做FTP,FILE,HTTPS 等等,只是代表了一种访问控制协议,urlopen一般接受三个参数,它的参数如下:

 1 urlopen(url,data,timeout) 

url:第一个参数必须有。

urllib VS urllib2区别:

urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。通过Urllib2伪装自己的User ,Agent

urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因

5.Request请求:

推荐大家这么写,因为在构建请求时还需要加入好多内容,通过构建一个request,服务器响应请求得到应答,这样显得逻辑上清晰明确

1 import uillib2
2 
3 request = urllib2.Request("www.baidu.com") # 加入请求,让服务器有准备时间
4 respose = urllib2.urlopen(request)
5 print respose.read() 

6.POST和GET数据传输:

现在大多数网站都是动态网页,需要你动态地传递参数给它,它做出对应的响应。所以,在访问时,我们需要传递数据给它。最常见的情况是什么?对了,就是登录注册的时候呀。

把数据用户名和密码传送到一个URL,然后你得到服务器处理之后的响应,这个该怎么办?下面让我来为小伙伴们揭晓吧!

数据传送分为POST和GET两种方式,两种方式有什么区别呢?

最重要的区别是GET方式是直接以链接形式访问,链接中包含了所有的参数,当然如果包含了密码的话是一种不安全的选择,不过你可以直观地看到自己提交了什么内容。POST则不会在网址上显示所有的参数,不过如果你想直接查看提交了什么就不太方便了,大家可以酌情选择。

1 import urllib
2 import urllib2
3 # POST用法:
4 Value = {"username": 'XXX', "password": 'XXX'}
5 data = urllib.urlencode(Value)
6 url = "http://219.223.252.65:9998/login.do"
7 request = urllib2.Request(url, data)
8 response = urllib2.urlopen(request)
9 print response.read()

GET方式:

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

 1 import urllib
 2 import urllib2
 3  
 4 values={}
 5 values['username'] = "1016903103@qq.com"
 6 values['password']="XXXX"
 7 data = urllib.urlencode(values) 
 8 url = "http://passport.csdn.net/account/login"
 9 geturl = url + "?"+data
10 request = urllib2.Request(geturl)
11 response = urllib2.urlopen(request)
12 print response.read()
13 
14 
15 ###输出结果:print 输出结果
16 http://passport.csdn.net/account/login?username=1016903103%40qq.com&password=XXXX

 7.保存从其他网址访问时Cookier

 1 #!/usr/bin/env python
 2 # coding:utf-8
 3 # POST 方式理解,访问动态界面
 4 import urllib
 5 import urllib2
 6 import cookielib
 7 
 8 
 9 # 将访问过程中cookier保存下来
10 
11 filename = "cookier.txt"
12 
13 # 申请对象保存cookier,之后写入文件中
14 cookier = cookielib.MozillaCookieJar(filename)
15 handler = urllib2.HTTPCookieProcessor(cookier)
16 
17 opener = urllib2.build_opener(handler)
18 # 通过建立一个属于自己urlopen,运用已有的cookier打开其他网站 result = opener.open("其他网址")
19 response = opener.open("http://www.baidu.com")
20 cookier.save(ignore_discard=True,ignore_expires=True)

ignore_discard :即使是cookier被抛弃了,还是可以保存下来;

ignore_expires: 将cookier保存下来,即使已经txt有了,还是可以将其全部覆盖。

原文地址:https://www.cnblogs.com/woainifanfan/p/5491090.html