正则表达式
import re text = "apple is $20.09,orange is $100.99" #ret = re.findall(".*\$\d+\.*\d*", text) #会找出所有匹配项 以list形式返回 #ret = re.sub("\$","㊙", text,1) #会替换掉匹配的字符串 第三个参数指定替换掉几个 #ret = re.split("\$", text) #会以匹配到的字符进行分割 r = re.compile(r""" .* #匹配任意多个字符 \$ #匹配¥ \d+ #匹配至少一个数字 \.* #匹配. 有或无 \d* #匹配无或多个数字 """,re.VERBOSE) ret = re.search(r,text) print(ret.group())
常用的匹配方法
一个小实践
from lxml import etree import requests from urllib import request import time import re import os number = 0 def get_page(): for x in range(1,2): url = "https://www.gushiwen.org/default_%s.aspx" %x getlistpoem(url) def getlistpoem(url): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36" } time.sleep(0.4) resp = requests.get(url, headers=headers) result = resp.text # print(result) tltles = re.findall(r'<div\sclass="cont">.*?<b>(.*?)</b>',result,re.DOTALL) print(tltles) tltles2 = re.findall(r'(<div class="cont">\s|</a>\s)<a href=".*?.aspx" target="_blank">(.*?)</a>', result) for lists in tltles2: a,b = lists print(b) get_page()
以上使用的是findall方法,除此之外还有
ret = re.match(r"<div>(.*?)</div>", resp.text,re.DOTALL)
ret.group()
从初始位置匹配
以及
ret = re.search(r"<div>(.*?)</div>", resp.text,re.DOTALL)
ret.group()
从全文匹配

浙公网安备 33010602011771号