Python如何使用re在网站中获取特定代码

Python如何使用re在网站中获取特定代码,python,html,regex,python-2.7,web,Python,Html,Regex,Python 2.7,Web,我正在努力使python具有挑战性。 好啊我知道,我可以把代码从源代码复制粘贴到txt文件中,然后制作类似的东西,但我想从网络上获取它来改进自己。(我已经做了)我试过了 re.findall(r"<!--(.*?)-->,html) re.findall(r',html) 但它什么也得不到。 如果您需要我的完整代码,请访问: #!/usr/bin/env python # -*- coding: utf-8 -*- import requests,re link = "http:

我正在努力使python具有挑战性。 好啊我知道,我可以把代码从源代码复制粘贴到txt文件中,然后制作类似的东西,但我想从网络上获取它来改进自己。(我已经做了)我试过了

re.findall(r"<!--(.*?)-->,html)
re.findall(r',html)
但它什么也得不到。 如果您需要我的完整代码,请访问:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests,re
link = "http://www.pythonchallenge.com/pc/def/ocr.html"
x = requests.get(link)
codes = re.findall(r"<!--(.*)-->",str(x.content))
print codes 
!/usr/bin/env python
#-*-编码:utf-8-*-
导入请求,重新
链接=”http://www.pythonchallenge.com/pc/def/ocr.html"
x=请求。获取(链接)
代码=关于findall(r“”,str(x.content))
打印代码
我也试着这样做:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests,re
link = "http://www.pythonchallenge.com/pc/def/ocr.html"
x = requests.get(link)
codes = re.findall("<!--\n(.*)\n-->",str(x.content))
print codes 
!/usr/bin/env python
#-*-编码:utf-8-*-
导入请求,重新
链接=”http://www.pythonchallenge.com/pc/def/ocr.html"
x=请求。获取(链接)
代码=re.findall(“,str(x.content))
打印代码
现在,它找到了文本,但仍然无法获得混乱:(

不确定你所说的“混乱”是什么意思。你应该在这篇文章中包含挑战的所有细节,而不是将用户链接到pythonchallenge文章

无论哪种方式,如果将正则表达式设置为单线模式,
/s
,则点字符
,也应与换行符
/n
匹配。这将避免正则表达式中的
\n(+)\n
构造,这可能会解决您的问题

这是一个例子

以下是修改后的python 2.7代码:

#!/usr/bin/python
import requests, re
link = "http://www.pythonchallenge.com/pc/def/ocr.html"
x = requests.get(link)
codes = re.findall("<!--(.*?)-->", str(x.content), re.S)
print codes[1]
!/usr/bin/python
导入请求,重新
链接=”http://www.pythonchallenge.com/pc/def/ocr.html"
x=请求。获取(链接)
代码=re.findall(“),str(x.content),re.S)
打印代码[1]
请注意
re.S
(.*?
)和
代码[1]
修改

  • re.S
    是python对
    //S
  • (.*)
    使
    *
    量词不贪婪
  • code[1]
    打印HTML注释中找到的第二组内容(因为
    findall(..)
    匹配2并返回两组内容的数组)
不确定你所说的“一团糟”是什么意思。你应该在这篇文章中包含挑战的所有细节,而不是将用户链接到pythonchallenge文章

无论哪种方式,如果将正则表达式设置为单线模式,
/s
,则点字符
,也应与换行符
/n
匹配。这将避免正则表达式中的
\n(+)\n
构造,这可能会解决您的问题

这是一个例子

以下是修改后的python 2.7代码:

#!/usr/bin/python
import requests, re
link = "http://www.pythonchallenge.com/pc/def/ocr.html"
x = requests.get(link)
codes = re.findall("<!--(.*?)-->", str(x.content), re.S)
print codes[1]
!/usr/bin/python
导入请求,重新
链接=”http://www.pythonchallenge.com/pc/def/ocr.html"
x=请求。获取(链接)
代码=re.findall(“),str(x.content),re.S)
打印代码[1]
请注意
re.S
(.*?
)和
代码[1]
修改

  • re.S
    是python对
    //S
  • (.*)
    使
    *
    量词不贪婪
  • code[1]
    打印HTML注释中找到的第二组内容(因为
    findall(..)
    匹配2并返回两组内容的数组)
您可以解决:

codes = re.findall("/<!--(.*?)-->/s",str(x.content))
codes=re.findall(“//s”,str(x.content))
使用空格和特征线查找“s”

您可以解决:

codes = re.findall("/<!--(.*?)-->/s",str(x.content))
codes=re.findall(“//s”,str(x.content))
带空格和特征线的“s”查找我将使用HTML解析器。您可以在HTML中使用

工作代码:

import requests
from bs4 import BeautifulSoup, Comment


link = "http://www.pythonchallenge.com/pc/def/ocr.html"
response = requests.get(link)

soup = BeautifulSoup(response.content, "html.parser")

code = soup.find_all(text=lambda text: isinstance(text, Comment))[-1]
print(code.strip())
我会改用HTML解析器。你可以在HTML中使用

工作代码:

import requests
from bs4 import BeautifulSoup, Comment


link = "http://www.pythonchallenge.com/pc/def/ocr.html"
response = requests.get(link)

soup = BeautifulSoup(response.content, "html.parser")

code = soup.find_all(text=lambda text: isinstance(text, Comment))[-1]
print(code.strip())

请提供一个python2.7的例子。在网站上,他们介绍了名为“mess”的代码,你也不需要帐户就可以访问该网站。顺便说一句,谢谢你的回答。这个答案对你想要的东西有用吗?它似乎对我有用。我也知道提出问题是不好的,但你能解释一下(.*)这是一个前缀吗请提供一个python2.7的例子。在网站上,他们介绍了名为“mess”的代码,你也不需要帐户就可以访问该网站。顺便说一句,谢谢你的回答。这个答案对你想要的有用吗?它似乎对我有用。我也知道提出问题是不好的,但你能解释一下(.*)吗这是一个类似于“Get everything here”的前缀吗?我尝试使用bs4,但很难控制bs4:(另外,我可能是python新手,所以我不太了解lambda。你能做一个函数吗?@Dr.UK好吧,如果你有HTML源代码要解析,一般来说你都可以。至于你的问题,
lambda
只是编写函数的一个简单方法。你很少需要在BeautifulSoup中传递函数,就像在这种情况下,BeautifulSoup是一个非常方便的方法。)d易于使用库。希望这有帮助。@Dr.UK,如果您发现bs4太难控制,那么祝您在嵌套元素和正则表达式方面好运。我尝试使用bs4,但控制bs4太难了:(另外,我可能是python新手,所以我不太了解lambda。你能做一个函数吗?@Dr.UK好吧,如果你有HTML源代码要解析,一般来说你都可以。至于你的问题,
lambda
只是编写函数的一个简单方法。你很少需要在BeautifulSoup中传递函数,就像在这种情况下,BeautifulSoup是一个非常方便的方法。)d使用库很容易。希望这对@Dr.UK有所帮助。如果您发现bs4太难控制,那么祝您使用嵌套元素和正则表达式好运。