解释一下正则表达式 <a.*?href="(.*?)".*?title="(.*?)".*?>
时间: 2023-10-18 13:37:53 浏览: 363
这个正则表达式可以用来匹配 HTML 文档中的链接标签 `<a>`,其中包含了 `href` 属性和 `title` 属性的信息。具体解释如下:
- `<a`: 匹配以 `<a` 开头的字符串。
- `.*?`: 匹配任意数量的字符,但是使用非贪婪模式,尽量少匹配字符。
- `href="`: 匹配 `href="` 字符串。
- `(.*?)`: 匹配任意数量的字符,但是使用非贪婪模式,尽量少匹配字符,并将匹配到的内容作为第一个分组。
- `".*?`: 匹配任意数量的字符,但是使用非贪婪模式,尽量少匹配字符,直到遇到下一个 `"` 字符。
- `title="`: 匹配 `title="` 字符串。
- `(.*?)`: 匹配任意数量的字符,但是使用非贪婪模式,尽量少匹配字符,并将匹配到的内容作为第二个分组。
- `".*?>`: 匹配任意数量的字符,但是使用非贪婪模式,尽量少匹配字符,直到遇到下一个 `>` 字符。
这个正则表达式可以帮助我们从 HTML 文档中提取出链接标签中的 `href` 和 `title` 信息。
相关问题
正则表达式<a href='(?P<url>.*?)'>(?P<title>.*?)</a> <br /> (?P<author>.*?) <br />
这个正则表达式可以用来匹配包含链接、标题和作者的 HTML 注记。其中,`(?)` 表示分组并命名,`.*?` 表示非贪婪匹配任意字符,`<br />` 匹配换行符。
具体匹配规则如下:
- `(?P<url>.*?)`:匹配包含链接的 HTML 标签,并将链接保存在名为 `url` 的分组中。
- `(?P<title>.*?)`:匹配包含标题的 HTML 标签,并将标题保存在名为 `title` 的分组中。
- `<br />`:匹配换行符。
- `(?P<author>.*?)`:匹配作者信息,并将作者信息保存在名为 `author` 的分组中。
例如,对于以下 HTML 注记:
```
<a href='https://example.com'>Example Website</a> <br /> John Doe
```
通过使用该正则表达式,可以匹配出:
- `url` 分组:`https://example.com`
- `title` 分组:`Example Website`
- `author` 分组:`John Doe`
re.compile(r'<a.*?href="(.*?)".*?title="(.*?)".*?>')是什么意思
这是一个 Python 中 re 模块的正则表达式,用于匹配 HTML 中的链接标签。具体来说,它的含义是:
- `re.compile`:将正则表达式编译成一个正则对象。
- `r'<a.*?href="(.*?)".*?title="(.*?)".*?>'`:正则表达式本体,其中:
- `<a` 匹配 `<a` 开始标签。
- `.*?` 匹配任意数量的字符,非贪婪模式(即尽可能少地匹配)。
- `href="(.*?)"` 匹配 `href` 属性的值,使用括号将匹配结果分组。
- `.*?` 同上,匹配 `title` 属性之前的任意字符。
- `title="(.*?)"` 匹配 `title` 属性的值,同样使用括号分组。
- `.*?>` 匹配剩余的标签内容,直到 `>` 结束标签。
- `(.*?)`:括号中的内容是一个分组,用于提取链接的 URL 和标题。
因此,这个正则表达式可以匹配形如 `<a href="url" title="title">text</a>` 的标签,并且提取其中的 URL 和标题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
import requests import re url='https://bbs.hcbbs.com' html=requests.get(url) html.encoding='GBK' #读取网页源码 reg=r'(.*?)' #写出所需要的正则表达式 titre=re.compile(reg,re.I) #创建正则表达式对象 urls=titre.findall(html.text) print(urls) f=open('D://aaaaa.csv','a') for titu in urls: f.write(titu[0]+','+titu[1]+'\n') #csv文件以逗号分隔 f.close() 写出该段代码的设计步骤
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
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')
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
import requests import re headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'} def baidu(page): num = (page - 1) * 10 url = 'http://www.baidu.com/s?ie=utf-8&medium=0&rtt=1&bsst=1&rsv_dl=news_b_pn&cl=2&wd=meizu&tn=news&rsv_bp=1&rsv_sug3=16&rsv_sug1=6&rsv_sug7=100&oq=&rsv_btype=t&f=8&inputT=5752&rsv_sug4=6599&x_bfe_rqs=032000000000000000004800000000000000000000000008&x_bfe_tjscore=0.080000&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&pn='+ str(num) res = requests.get(url, headers=headers).text baidu(i+1) print("第"+str(i+1)+"页爬取成功") import re p_title = '}">(.*?)
(.*?)<span ' #提取时间 info=re.findall(p_info,res,re.S) print(info) p_href= '<a class="source-link_Ft1ov" href="(.*?)"' #提取网址 href=re.findall(p_href,res,re.S) print(href) p_souce='<span class="c-color-gray" aria-label=".*?">(.*?)</span>' #提取来源 souce=re.findall(p_souce,res,re.S) print(souce) for i in range(len(title)): title[i]=re.sub('<.*?>','',title[i]) #去掉、 print(str(i+1)+"."+title[i]+' ('+info[i]+"-"+souce[i]+')') print(" ",href[i])![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)