小甲鱼的 爬虫 ,正则表达式 +爬虫异常处理

使用正则表达式,首先需要导包:

import re

贪婪匹配

比如,这句html代码,需要匹配<html>

s = "<html><title>i am a good boy</title></html>"

贪婪搜索直接把整个代码全部匹配

print(re.search(r"<.+>", s))
<re.Match object; span=(0, 43), match='<html><title>i am a good boy</title></html>'>

在+ 后面添加 ? 就不会一直搜索

print(re.search(r"<.+?>", s))
<re.Match object; span=(0, 6), match='<html>'>

\A \Z \b

\A 相当于 ^  :匹配输入字符串开始的位置
\Z 相当于 $ :匹配输入字符串的结束位置
\b 匹配一个单词的边界,符号和括号属于单词的边界,而_下划线不属于
print(re.findall(r"\bfish\b", "fish.com!fish_big!(fish)"))
['fish', 'fish']
\B :和\b相反,不匹配单词边界,比如py\B,只匹配 python ,py3 ,不会匹配py py. py!
\d :匹配任何一个数字

search 方法

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’。

result = re.search(r" (\w+) (\w+)","i love myself")
print(result)  # love myself
print(result.group(0)) # love myself
print(result.group(1)) #love
print(result.group(2)) #myself

较为常用的元字符包括: “+”, “*”,以及 “?”。
“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。

“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。

爬虫必须背的代码:


import urllib.request
import urllib.error
import os
def url_open(url):
    # 设置文件头
    header = {"User-Agent":
                 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}
    req = urllib.request.Request(url, headers=header)
    # 现在开始访问
    try:
        response = urllib.request.urlopen(url)
    except urllib.error.HTTPError as e:
        print(e.code)
        print(e.read())

    html = response.read()
    return html

def get_image(html):
    p = r'<img src="([^"]+\.jpg)"'
    imglist = re.findall(p,html.decode('utf-8'))


    for each in imglist:
        print(each)

    # for each in imglist:
    #     filename = each.split('/')[-1]
    #     urllib.request.urlretrieve(each,filename)


if __name__ == '__main__':

    url = 'https://img.022gan.com/post/17265.ml'   
    get_image(url_open(url))

异常处理

# http的状态码,状态码为100~299 的范围表示成功。
# # 400~499:表示是客户端出了问题。
# # 500:表示服务端出了问题
# # 403:Forbidden 服务器已经理解请求,但是拒绝执行

import urllib.request
import urllib.error

req = urllib.request.Request("http://www.fichc.com/ooxx.html")
try:
    urllib.request.urlopen(req)
except urllib.error.HTTPError as e:
    print(e.code)
    print(e.read())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值