爬虫基础_龙红云

​​​​​爬虫入门程序 import urllib.request 定义网址 url="http://www.baidu.com" 访问网址 responsel=urllib.request.urlopen(url) 打印状态码 print(responsel.getcode()) 读取页面内容 print(responsel.read())

爬虫程序添加data、header,然后post请求
import urllib
from urllib import request
指定url
url="http://www.zhihu.com/signin?next=%2F"
请求头的内容
user_agent="Moailla/4.0(compatible;MSIE 5.5;Windows NT)"
表单的请求参数
values={"username":"17388888888","xxxxxxxx"}
data=urllib.parse.urlencode(values).encode(encoding='UTF-8')
构建请求头headers
headers={'User-Agent':user_agent,
               'Referer':'http://www.zhihu.com/articles'    
               }         
构建请求
req=request.Request(url,data=data,headers=headers,method='POST')
打开网页
resp=request.urlopen(req)
读取网页内容
print(resp.read())

爬虫程序添加cookie
from urllib import request
from http import cookiejar
声明一个CookieJar对象实例来保存cookie
cookie=cookiejar.CookieJar()
创建一个cookie处理器
handler=request.HTTPCookieProcessor(cookie)
定义一个下载器
opener=request.build_opener(handler)
下载页面
resp=openner.open('http://www.baidu.com')
遍历cookie
for item in cookie:
    print('NAME='+item.name)
    print('VALUE='+item.value)

正则表达式
import re
定义正则规则=模式,r表示原生字符串
pattern=re.compile(r'hello')加了r,\n就不是换行了匹配字符,match函数会从第一个字符开始匹配
result1=re.match(pattern,"htllno hello")加了.span()只显示位置:(0,5) 打印时result1加了.group()显示字符
if result1:
    print(result1.group())
result2=re.match(pattern,"htllohello")re.match(pattern,"hell hello")匹配不到 是从前面匹配
if result2:
    print(result2)
else:
    print('no')
定义正则规则    匹配a和c之间的字符
pattern=re.compile(r'a.c')  .表示a和c之间可以放任意一个字符,只能放一个定义一下被匹配的
res=re.match(pattern,"a2cdefg")
print(res)
匹配  反斜杠\
pattern2=re.compile('a\.c)#特殊字符需要用\转义 不能使用r来变成原生字符
res2=re.match(pattern2,'a.cedfd')
print(res2)
匹配部分字符
pattern3=re.compile(r'a[a,f,g]cdefg')a-f表示范围  a,f,g只能匹配a或f或g
res3=re.match(patter3,"afcdefg")

匹配数字
patter4=re.compile(r'a\dc')#  \D匹配非数字
res4=re.match(patter4,"a5c")

匹配空格
patter5=re.compile(r'a\sc')
res5=re.match(patter5,"a c")  \S匹配非空格

匹配个数 abc*表示后面可以匹配无数个b
patter6=re.compile(r'acb*')
res6=re.match(patter6,"dfgdgdkbbbbbbbb")

匹配abc或者efg
rx=re.compile(r'abc|efg')
res=re.search(rx,"dksjfkabc")

匹配2(若干)个abc
rx=compile(r'(abc){2}')
res=re.search(rx,"fiowejabcabcjjj")

rx=re.compile(r'(abc)(def)')分组 abc要和def连在一起才能匹配到
res=re.search(rx,"gegabcdefdgf")

rx=re.compile(r'(?P<p1>abc))给分组起一个别名p1
res=re.search(rx,"afdsfaabc")

rx=re.compile(r'(\d)abc\1')   \1:引用第一个匹配规则,即\d,引用后必须与前面的数字一样才能匹配
res=re.search(rx,"5hhiue5")

rx=re.compile(r'(?P<tt>abc)efg(?P=tt)')# (?P=tt)引用别名为tt的规则
res=re.search(rx,"abcefgabc")

rx=re.compile(r"\d*\w")   *是匹配0个到多个且尽可能少匹配
res=re.search(rx,"389747387dkjf")

rx=re.compile(r'\d{5,10}')
res=re.match(rx,'188888888')  匹配5-10个数字  

?表示0个到一个   +表示1个到多个且有多少匹配多少   \d{10}匹配10个数字

rx=re.compile(r'\d{5,11}@\w{2}\.com')
res=re.match(rx,'2591162883@qq.com)

贪婪模式
rx=re.compile(r'\w+')
res=re.match(rx,'dpgjfdoijgfosfdgjfgdj')

#边界匹配   ^表示以若干个字符为开头   $表示以若干个字符为结尾,$要结合search()使用  search可在任意位置匹配 match只在开头匹配
rx=re.compile(r'abc$')
res=re.search(rx,'wefweaabc')

rx=re.compile(r,'\Abea')   \A仅匹配开头的bea字符,\Z仅匹配末尾的指定的字符
res=re.search(rx,'beauti\nful')

rx=re.compile(r'ver\b')
res=re.search(rx,"never")  \b 匹配字符串开头或末尾的指定字符ver,放在指定字符的前面则匹配开头,放在指定字符的后面则匹配末尾

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值