爬虫学习

Python2.X和Python3.X调用urllib库常见的变化

Python2.X Python3.X
import urllib2 import urllib.request,urllib.error
import urllib import urllib.request,urllib.error,urllib.parse
import urlparse import urllib.parse
urllib2.open urllib.request.open
urllib.urlencode urllib.parse.urlencode
urllib.quote urllib.request.quote
cookielib.CookieJar http.CookieJar
urllib2.Request urllib.request.Request

修改报头

当网站网页禁止(403 forbidden)使用Python urllib库中默认的报头(headers),我们需要修改报头

使用build_opener()修改报头

以下是实现这种方法的一段代码:

1
2
3
4
5
6
import urllib.request
url = ("a url")
headers = ("User-Agent","the details of User-Agent")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()

使用add_header()添加报头

使用urllib.request.Request()下的add_header()修改UA。
实现浏览器的模拟, 以下是实现这种方法的一段代码:

1
2
3
4
5
import urllib.request
url = "a url"
req = urllib.request.Request(url)
req.add_header("User-Agent","the details of User-Agent")
data = urllib.request.urlopen(req).read()

使用代理

有时使用同一个IP爬取别人网页的东西,久了之后有可能会被该网站屏蔽这个IP,这是可以使用代理IP。 代理IP可以通过搜索引擎找到(国内高匿IP)。代码实现如下:

1
2
3
4
5
6
7
8
9
10
def use_proxy(proxy_addr,url): #定义一个使用代理IP的函数
import urllib.request
proxy = urllib.request.ProxyHandler({'http':proxy_addr})
opener = urllib.request.build_opener(proxy,urllib.request.ProxyHandler)
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read().decode('utf-8')
return data
proxy_addr = "xxx.xxx.xxx.xxx:xx" #这里赋值给proxy_addr的是代理的IP以及它的端口号
data = use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))

这段代码运行成功会打印出百度首页的长度,失败的话会出现urllib.error.URLError的报错

正则表达式

相关文档

re.search()与re.match()的qubie

re.match()函数从源字符串的开头进行匹配,re.search()函数在全文进行检索并匹配

例子:

1
2
3
4
5
6
7
8
9
10
11
import re
string = "hellopythonmypythonhispythonourpythonPython"
pattern = ".python."
result1 = re.match(pattern,string)
result2 = re.search(pattern,string)
print(result1)
print(result2)
----------------------------------------
#程序运行的结果为:
None
<_sre.SRE_Match object; span(6,14),match='ypythonh'>

click here to show comments