如下 ,返回一个 html 页面(类型不是 html 是 str,不能 bs4 解析),想提取里边的 url=https://www.baidu.com/s/1dD8Hkn3 那一串链接,不知道怎么写正则,各种尝试,均不行,取不出来 ,求 v 友帮忙写一个,万谢
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>正在跳转...</title>
<meta name="referrer" content="no-referrer" />
<meta HTTP-EQUIV="refresh" content="0; url=https://www.baidu.com/s/1dD8Hkn3">
</head>
<body>
</body>
</html>
1
adminii 2018-09-01 15:36:19 +08:00
<meta.+url=(.+)\">$
直白写入这个不知道是不是符合要求。 提取$1 就是地址了 |
2
delectate 2018-09-01 15:43:36 +08:00
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> a='''<!DOCTYPE html> ... <html> ... <head> ... <meta charset="utf-8"> ... <title>正在跳转...</title> ... <meta name="referrer" content="no-referrer" /> ... <meta HTTP-EQUIV="refresh" content="0; url=https://www.baidu.com/s/1dD8Hkn3"> ... </head> ... <body> ... </body> ... </html> ... ''' >>> re.findall(r'url=(.+)"',a) ['https://www.baidu.com/s/1dD8Hkn3'] >>> |
4
NickCarter 2018-09-01 15:45:05 +08:00 via iPhone
|
5
locoz 2018-09-01 16:02:01 +08:00 via Android
“类型不是 html 是 str ”?这话有点问题
|
6
zaaazaa 2018-09-01 16:04:55 +08:00
用 beautifulsoup 先取出片段再用正则会不会简单很多
|
7
zaaazaa 2018-09-01 16:05:23 +08:00
好吧居然不能用 bs4
|
8
pppguest3962 2018-09-01 16:56:18 +08:00
字符串里面如果还有标签区段,str 可以继续弄进 bs4,再做递进一步的处理的。。。
``` htmlStr = """<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>正在跳转...</title> <meta name="referrer" content="no-referrer" /> <meta HTTP-EQUIV="refresh" content="0; url=https://www.baidu.com/s/1dD8Hkn3"> </head> <body> </body> </html> """ htmlStrBs4 = BeautifulSoup(htmlStr.__str__(), 'lxml') ``` |
9
zhzer 2018-09-01 17:54:46 +08:00
pattern = r"<meta.+? content=(['"]).+?url=(.+) ?.*\1>"
组 2 就是链接 |
10
PulpFunction 2018-09-01 18:09:01 +08:00
想知道楼主怎么各种尝试的,上切片美滋滋啊
|
11
des 2018-09-01 18:11:34 +08:00 via Android
最近什么回事,看见好几个求正则的了。
都是做爬虫,你们就不能老老实实用 beautifulsoup 吗?? |
12
zst 2018-09-01 18:16:31 +08:00 via Android
你把 str 丢到 bs4 里不是一样吗......
|
13
duan602728596 2018-09-01 19:16:18 +08:00 via iPhone
python 不是有 pyquery 么
|
14
zhengjian 2018-09-01 21:16:57 +08:00
from lxml import etree
html_string = ''' <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>正在跳转...</title> <meta name="referrer" content="no-referrer" /> <meta HTTP-EQUIV="refresh" content="0; url=https://www.baidu.com/s/1dD8Hkn3"> </head> <body> </body> </html> ''' html = etree.HTML(html_string) url = html.xpath('//meta[3]/@content')[0].split('url=')[-1] print(url) 觉得 lxml 比 bs4 舒服的多 |
15
lu5je0 2018-09-01 21:25:36 +08:00
url=(.*)\"
|
18
ShareDuck 2018-09-02 09:56:13 +08:00 via Android 1
每次写正则都要看“ 30 分钟入门”的路过,膜拜各路大神。
|
19
css3 OP @PulpFunction 切片长度一致才行吧,url 这每个长度都不一样啊
|
21
PulpFunction 2018-09-02 14:19:58 +08:00
|
22
css3 OP @PulpFunction 可以举例说明吗?😀
|
23
richieboy 2018-09-03 08:53:53 +08:00
"(?<=content=\"0; url=)[^\"]*(?=\">)"
|
24
PulpFunction 2018-09-03 09:15:52 +08:00
@css3 你自己数吧胸跌
|
25
wersonliu9527 2018-09-03 09:26:35 +08:00
其实用 xpath 我觉得是最简单的,配合谷歌浏览器的插件 xpath helper
|
26
xpresslink 2018-09-03 10:05:18 +08:00
楼主基本概念都不清楚么?
只取一个 URL 确实只要用正则就可以了,用 bs4, lxml 之类方案有些重了。 但是返回一个 html 页面(类型不是 html 是 str,不能 bs4 解析)这是什么屁话。 |
27
css3 OP @xpresslink 不要方,我调用一个接口,人家返回的就是一个 html 页面,类型是 str,有什么好惊讶的呢
|
28
icris 2018-09-03 11:31:15 +08:00
我来复制一个示例吧
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>') tag = soup.b type(tag) # <class 'bs4.element.Tag'> 第一行单引号里面是不是字符串?能不能用 bs4 解析? |
29
xpresslink 2018-09-03 14:02:15 +08:00
@css3 我只能呵呵了
|
30
thautwarm 2018-09-03 17:51:17 +08:00
话说我笔记记得有:
re_exp = re.compile(r'( https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,})') |