re.compile(r'<img.*src="(.*?)"', re.S)
时间: 2024-09-20 17:13:22 浏览: 135
这个正则表达式 re.compile(r'<img.*src="(.*?)"', re.S)
是用于Python的re
模块中,它主要用于从HTML文本中匹配<img>
标签中的src
属性值。这里解释一下:
re.compile()
函数用于编译一个正则表达式模式,以便后续多次快速匹配。r
前缀表示这是一个原始字符串(raw string),避免反斜杠\
的转义。<img.*src="
这部分匹配以<img
开始,后面跟任意字符(*
)直到遇到src=
的部分。(.*?)
是一个非贪婪匹配,用于捕获src
属性值。?
表示尽可能少地匹配,()
创建了一个捕获组。"
是匹配双引号,这里的两个连续的"
是为了包括整个URL路径。re.S
标志(Single line mode)表示该模式应按行模式匹配,即.
可以匹配包括换行符在内的任何字符。
使用这个正则表达式,你可以从HTML源码中提取出所有图片的URL链接。例如:
import re
html = ... # HTML内容
matches = re.findall(re.compile(r'<img.*src="(.*?)"', re.S), html)
for match in matches:
print(match)
相关问题
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
是Python中正则表达式(re模块)的一个实例。它定义了一个名为 findImgSrc
的模式对象,用于在HTML字符串中查找 <img>
标签的 src
属性值。
re.compile()
函数创建一个正则表达式的编译版本,这里传入的是一个字符串,表示匹配规则。r
前缀表示原始字符串,避免反斜杠\
被转义。<img.*src="(.*?)"
是正则表达式模式,匹配<img>
标签开始,然后任意字符(*
)直到遇到第一个"
符号,这里的(.*?)
是一个非贪婪匹配,尽可能少地匹配内容,并将其捕获到第一个组中,即"(.*?)"
。re.S
表示“dot matches newline”,允许.
匹配包括换行符在内的任何字符,使得该模式可以处理跨行的HTML源码。
当你需要从HTML文本中提取所有图片URL时,可以用这个模式来进行搜索并获取匹配的结果。例如:
html_content = ... # HTML字符串
matches = findImgSrc.findall(html_content)
解释代码s = '<img width="160" height="224" data-src="(.*?)" src=' +\ '.*?<span class="bt-l">(.+?)</span>.*?<span class="bt-r">(\d.\d)?</span>' + \ ".*?<span>导演:(.*?)</span>" + ".*?<span>主演:(.*?)</span>" + ".*?<span>类型:(.*?)</span>"+\ ".*?<span>地区:(.*?)</span>" + ".*?<span>语言:(.*?)</span>" + ".*?<span>片长:(.*?)</span>" pattern = re.compile(s,re.S) items = re.findall(pattern, html) for outer in range(len(items)): items[outer] = list(items[outer]) for i in range(len(items[outer])): if items[outer][i] == "": items[outer][i] = "暂无信息" else: items[outer][i] = items[outer][i].replace("·","·") destinationPath = "items.json" fd = open(destinationPath,"w+",encoding='utf-8') json.dump(items,fd) fd.close()
这段代码是用正则表达式解析HTML页面,提取其中的电影信息,并将结果存储为一个JSON文件。具体来说,正则表达式模式中包含了多个匹配项,用于匹配电影的图片、名称、评分、导演、主演、类型、地区、语言、片长等信息。然后,使用re.findall()函数来查找所有匹配项,并将结果存储在items数组中。接着,对于每一个匹配项,将其中的空信息替换为"暂无信息",并将"·"替换为"·"。最后,将items数组中的结果存储为一个JSON文件。
相关推荐






import requests import re # from bs4 import BeautifulSoup import matplotlib.pyplot as plt import numpy as np # import pandas as pd i = 1 lists = [0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250] title = [] year = [] country = [] score = [] number = [] for page in range(0, 226, 25): url = 'https://movie.douban.com/top250?start=' + str(page) + '&filter=' headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"} resp = requests.get(url=url, headers=headers) resp.encoding = "utf-8" pattern = re.compile( r'.*? < img width="100" alt="(?P<title>.*?)".*?class="">.*?.*?导演: (?P<director>.*?) .*?
.*?(?P<year>.*?) / (?P<country>.*?) .*?"v:average">(?P<score>.*?).*?(?P<number>.*?)人评价', re.S) pic_url = re.compile(r'< img width="100".*?src="(.*?)" class="">', re.S) pic_URl = pic_url.findall(resp.text) data2 = pattern.finditer(str(resp.text)) for url1 in pic_URl: file1 = open('films.pic\\' + str(i) + '.jpg', 'ab') Pic = requests.get(url1) file1.write(Pic.content) i = i + 1 file1.close() file2 = open('movie.text', 'a+', encoding='utf-8') for m in data2: if int(m['number']) / 100000 > 13: number.append(int(m['number']) / 100000) country.append(m['country']) year.append(m['year']) title.append(m['title']) score.append(m['score']) file2.write( '电影名:' + m['title'] + ', 导演:' + m['director'] + ', 年份:' + m['year'] + ', 国家:' + m['country'] + ', 评分:' + m[ 'score'] + ',评价人数:' + str(int(m['number']) / 100000) + ' 100k') file2.write('\n') print( '电影名:' + m['title'] + ', 导演:' + m['director'] + ', 年份:' + m['year'] + ', 国家:' + m['country'] + ', 评分:' + m[ 'score'] + ',评价人数:' + str(int(m['number']) / 100000) + ' 100k')

import requests import os import time import json from tqdm import tqdm import re def taopiaopiao(): headers = { 'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 Edg/113.0.1774.57' } time.sleep(0.5) url = "https://dianying.taobao.com/showList.htm?spm=a1z21.6646273.city.2.4ed46d6ekOc3wH&n_s=new&city=310100" response = requests.get(url, headers=headers) html = response.text print("网页信息已获取…") time.sleep(0.5) destinationPath = "result.txt" fd = open(destinationPath, "w+", encoding='utf-8') fd.writelines(html) end = html.find('') if end != -1: html = html[:end] #print(html) fd.close() s = '<img width="160" height="224" data-src="(.*?)" src=' + \ '.*?(.+?).*?(\d.\d)?' + \ ".*?导演:(.*?)" + ".*?主演:(.*?)" + ".*?类型:(.*?)" + \ ".*?地区:(.*?)" + ".*?语言:(.*?)" + ".*?片长:(.*?)" + \ ".*?" pattern = re.compile(s, re.S) items = re.findall(pattern, html) #print(items) destinationPath = "items.json" fd = open(destinationPath, "w+", encoding='utf-8') json.dump(items, fd) fd.close() dir_name = "./images" if not os.path.exists(dir_name): os.mkdir(dir_name) cnt = 0 for item in tqdm(items): url = item[0] file_name = str(cnt) + ".jpg" cnt += 1 response = requests.get(url, headers=headers) with open(dir_name + "/" + file_name, 'wb') as f: f.write(response.content) info = "图片文件: {0:25}{1}".format(file_name, " 成功下载...") print(info) return items if __name__ == "__main__": taopiaopiao()









