Python爬虫学习笔记

修改报头

1.使用build_opener()修改报头:

headers = ("User-Agent",           #定义变量headers存储User-Agent信息           
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
opener = urllib.request.build_opener()             #创建opener对象并赋给变量
openeropener.addheaders = [headers]          #设置opener的addheaders
data = opener.open(url).read()           #使用opener对象的open()方法打开网址

2.使用add_header()添加报头

req = urllib.request.Request(url)         #创建Request对象
req.add_header("User-Agent",    #使用add_header()方法添加header信息            
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
data = urllib.request.urlopen(req).read()    #使用urlopen打开该Request对象即可打开对应网址

超时设置(timeout)

       格式:urllib.request.urlopen("http://yum.iqianyue.com", timeout=1)

Get请求

Keywd=”hello”

url=http://baidu.com/s?wd=+keywd

       req=urllib.request.Request(url)   #创建Request对象

data=urllib.request.urlopen(req).read()#使用urlopen打开该Request对象即可打开对应网址

注意:当有中文是需进行重新编码

       Key_wd=urllib.request.quote(keywd)

Post请求

postdata = urllib.parse.urlencode({    #关键知识点:将数据使用urlencode编码
    "name": "liweiguotest", "pass": "123456"}).encode('utf-8')  #使用encode设置为utf-8编码
req = urllib.request.Request(url, postdata)req.add_header("User-Agent",            
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")

代理服务器设置

def use_proxy(proxy_addr, url):     #使用代理服务器爬去取网页(函数)    
    import urllib.request    
    proxy = urllib.request.ProxyHandler({'http': proxy_addr})  #设置对应的代理服务器信息         
    opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler) #创建一个自定义 opener对象    
    urllib.request.install_opener(opener)   #创建全局默认的opener对象,所以下面可以直接打开网址    
    data = urllib.request.urlopen(url).read() #.decode('utf-8')    return dataproxy_

addr = "60.255.186.169:8888"
data = use_proxy(proxy_addr, "http://www.liweiguo.daxueyuan.top")

正则表达式基础

1.原子:正则表达式中最基本的组成单位

普通字符做原子 (“a”,”b”)
非打印字符做原子 (“\n”,”\t”)
通用字符做原子: \w:匹配任意一个字母,数字或下划线
\W:匹配除上述之外的任意字符
\d:匹配任意一个十进制数
\D: 匹配除十进制数之外的任意字符
\s:匹配任意一个空白字符
\S:匹配除空白字符之外的任意字符
原子表:定义一组原子,匹配的时候表中的各原子逐一进行匹配

2.元字符:正则表达式具有一些特殊含义的字符

 
. 匹配除换行符以外的任意字符
ˆ 匹配字符串开始的位置
$ 匹配字符串结束的位置
* 匹配0次或多次前面的原子
? 匹配0次或1次前面的字符
+ 匹配1次或多次前面的字符
{n} 前面的字符恰好出现n次  (字符可以是通用字符)
{n,} 前面的原子至少出现n次
{n,m} 前面的原子至少出现n次至多出现m次
| 选择模式符
() 模式单元符 :在不改变正则表达式的情况下改变其含义,从而实现匹配结果的调整。

 

正则表达式常见函数

re.match() 从字符串开始匹配一个模式
格式:re.match(pattern,string,flag)    #flag为可选参数,可以放模式修正符等
re.search() 在全文进行检索并匹配
全局匹配函数 将符合模式的式子全部找出
格式:Result = re.compile(pattern).findall(string)
re.sub() 根据正则表达式实现替换某些字符串

格式:re.sub(pattern,rep,string,max)

Rep:要替换成的字符串

Max:可选参数,代表最多替换的次数。如果不写,则会将符合模式的结果全部替换

模拟登录

1.使用post模拟登录并保存cookie

postdata = urllib.parse.urlencode({  # 通过post请求登录    
    "yhm": "04170819",    
    "mm": "1997719liweil..."}).encode('utf-8')
req = urllib.request.Request(url, postdata)  # 构建对象
    req.add_header("User-Agent",  # 添加表头               
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134")
cjar = http.cookiejar.CookieJar()  # 创建cookiejar对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))  # 使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener处理器
urllib.request.install_opener(opener)  # 将opener设为全局
file = opener.open(req)data = file.read()  # 请求信息并读取

fhandle = open("C:\\Users\\john\\Desktop\\summer\\crawler\\HTMLfile\\cookiejar_test.html", 'wb')
fhandle.write(data)fhandle.close()

2.使用已知cookie模拟登陆

request_header = {    
    "Accept": '*/*',    
    "Accept-Language": "en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3",    
    'Host': 'jw.jluzh.com',    
    "Connection": "Keep-Alive",    
    "Cookie": cookie_str,    
    "User-Agent": "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"}

req = urllib.request.Request(url, headers=request_header)
resp = urllib.request.urlopen(req)
data = resp.read() #.decode('utf-8')

猜你喜欢

转载自blog.csdn.net/li_l_il/article/details/82555928