python爬虫学习过程

来源:互联网 发布:淘宝号的名字可以改吗 编辑:程序博客网 时间:2024/06/02 00:23

首先,如果你有别的语言的基础的话,我感觉可以直接入手python爬虫,然后通过具体实例来完善自己的python;如果没有的话,我感觉还是要答题上了解学习下python;

一:了解什么是python爬虫:这个百度什么都有很多解释。

二:对于urllib,urllib2库的了解使用,可以爬取网页的源代码,这是你爬取数据的第一步。当然这种源代码的爬取方法很多,request,post,get等等。

三:接下来我认为就是对你所需要的数据的爬取了,beautifulsoup,webdriver等方法都是很好的,这里有的数据标签可能还需要用到正则表达式。

四:当然python爬虫还有一些cookie和异常处理的一些功能,这方面我了解的较少。


下面是我自己学习过程中整理的别人的对我有用的一些资料,杂乱无章,大家将就看吧:

URL就是在浏览器端输入的    http://www.baidu.com    这个字符串

如下面的URI:
http://www.why.com.cn/myhtml/html1223/

URL是URI的一个子集

除了"http:",URL同样可以使用"ftp:","file:"等等来替代HTTP是基于请求和应答机制的:

 

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应,urllib仅可以接受URL

urllib2提供一个基础函数urlopen,通过向指定的URL发出请求来获取数据。最简单的形式就是

1. import urllib2

2. response=urllib2.urlopen('http://www.douban.com')

3. html=response.read()

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

 

 

 

客户端提出请求,服务端提供应答。

urllib2用一个Request对象来映射你提出的HTTP请求

 

Data数据的get和request传送

 

HTTP中,这个经常使用熟知的POST请求发送。并不是所有的POSTs都来源于表单,你能够使用POST提交任意的数据到你自己的程序。

如果没有传送data参数,urllib2使用GET方式的请求

 

规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据

 

 

1. import urllib2  

2.   

3. req = urllib2.Request('http://www.baibai.com')  

4.   

5. try: urllib2.urlopen(req)  

6.   

7. except urllib2.URLError, e:    

8.     print e.reason                      关于爬虫的异常处理

 

 

Beautifulsoup中find_all函数

find_all( name , attrs , recursive , string , **kwargs ) 
find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

爬取指定内容方法1:利用beautifulsouprequests

            方法2:利用seleniumchromedriver网页进行获取

 

 

http://www.cnblogs.com/cnkemi/p/6080288.html               //webdriver定位元素法

 

 . 匹配除“\n”之外的任意字符

2) * 匹配前一个字符0次或无限次

3) ? 匹配前一个字符0次或1次

4) + 匹配前一个字符1次或无限次

5) () 当我们需要一段内容的时候就用括号包围起来,不需要的内容放在括号外。

.* 贪心算法,匹配出最大满足条件的。就是能匹配到最大的字符串就取到最大的。

.*? 非贪心算法,匹配最小的满足条件的,多次。

以下可以放到熟悉一段时间后了解,写出来备查。

\ 转义字符,使后一个字符改变原来的意思

 

http://blog.csdn.net/shijie19930806/article/details/73716145                                    关于正则表达式学习的博客

 

import urllib  

import urllib2  

 

url = ‘http://www.server.com/login‘

user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘  

values = {‘username‘ : ‘cqc‘,  ‘password‘ : ‘XXXX‘ }  

headers = { ‘User-Agent‘ : user_agent }  

data = urllib.urlencode(values)  

request = urllib2.Request(url, data, headers)  

response = urllib2.urlopen(request)  

page = response.read()

这样,我们设置了一个headers,在构建request时传入,在请求时,就加入了headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。

另外,我们还有对付反盗链的方式,对付防盗链,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应,所以我们还可以在headers中加入referer

例如我们可以构建下面的headers

 

1. values = {"username""geek""password""**********"}  

2. # 或者  

3. values = {}  

4. values["username"] = "geek"  

5. values["password"] = "**********"  

6. # 将字典编码  

7. data = urllib.urlencode(values)  

8. url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"  

9. request = urllib2.Request(url, data)  

10. response = urllib2.urlopen(request)  

11. print response.read()  

构建post请求

 

 

 

 

1. # GET请求  

2. values = {"username""geek""password""**********"}  

3. data = urllib.urlencode(values)  

4. url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"  

5. request = url + "?" + data  

6. response = urllib2.urlopen(request)  

7. print response.read()  

 

 

 

 

1. url = "http://www.server.com/login"  

2. # 设置请求的身份,如果没有,服务器可能会没有响应  

3. user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"  

4. values = {"username""geek""password""**********"}  

5. # 在headers中设置agent  

6. headers = {"User-Agent": user_agent}  

7. data = urllib.urlencode(values)  

8. # 在request中添加headers  

9. request = urllib2.Request(url, data, headers)  

10. response = urllib2.urlopen(request)  

11. page = response.read()  

二、对付“反盗链”

 

1. # 对付“反盗链”(服务器会识别headers中的referer是不是它自己,如果不是则不响应),构建以下headers  

2. headers = {"User-Agent""Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",  

3.            "Referer""http://www.zhihu.com/articles"

4. 这样,我们设置了一个headers,在构建request时传入,在请求时,就加入了headers传送,服务器若识别了是浏览器发来的请求,就会得到响应。 

 

 

 

 

1. # headers的一些其他属性:  

2. # User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求  

3. # Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。  

4. # application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用  

5. # application/json : 在 JSON RPC 调用时使用  

6. # application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用  

7. # 在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务 


urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,网站君都不知道是谁在捣鬼了,这酸爽!

 

 

import urllib2

response =urllib2.urlopen('http://www.baidu.com', timeout=10)

timeout的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。