哪位大神能帮忙写一个正则表达式啊?

2018-09-01 15:24:21 +08:00
 css3

如下 ,返回一个 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>

3661 次点击
所在节点    Python
30 条回复
adminii
2018-09-01 15:36:19 +08:00
<meta.+url=(.+)\">$
直白写入这个不知道是不是符合要求。
提取$1 就是地址了
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']
>>>
css3
2018-09-01 15:44:44 +08:00
@adminii
@delectate 非常感谢二位,多谢!
NickCarter
2018-09-01 15:45:05 +08:00
locoz
2018-09-01 16:02:01 +08:00
“类型不是 html 是 str ”?这话有点问题
zaaazaa
2018-09-01 16:04:55 +08:00
用 beautifulsoup 先取出片段再用正则会不会简单很多
zaaazaa
2018-09-01 16:05:23 +08:00
好吧居然不能用 bs4
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')
```
zhzer
2018-09-01 17:54:46 +08:00
pattern = r"<meta.+? content=(['"]).+?url=(.+) ?.*\1>"
组 2 就是链接
PulpFunction
2018-09-01 18:09:01 +08:00
想知道楼主怎么各种尝试的,上切片美滋滋啊
des
2018-09-01 18:11:34 +08:00
最近什么回事,看见好几个求正则的了。
都是做爬虫,你们就不能老老实实用 beautifulsoup 吗??
zst
2018-09-01 18:16:31 +08:00
你把 str 丢到 bs4 里不是一样吗......
duan602728596
2018-09-01 19:16:18 +08:00
python 不是有 pyquery 么
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 舒服的多
lu5je0
2018-09-01 21:25:36 +08:00
url=(.*)\"
xml123
2018-09-01 22:11:28 +08:00
@des 可能是因为正则比较简单(门槛低)吧,我第一次写爬虫也是全程正则硬刚……
des
2018-09-02 06:32:30 +08:00
@xml123 门槛低倒是,简单就不一定了
ShareDuck
2018-09-02 09:56:13 +08:00
每次写正则都要看“ 30 分钟入门”的路过,膜拜各路大神。
css3
2018-09-02 13:22:58 +08:00
@PulpFunction 切片长度一致才行吧,url 这每个长度都不一样啊
css3
2018-09-02 13:23:56 +08:00
@ShareDuck 我也看,但写不出来能用的正则,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX