Python 正则表达式语法错误
我正在测试一段来自2600杂志的代码,这段代码是用来生成单词列表的,灵感来自于我在谷歌上的一些搜索。不过在这段代码的某一行,我遇到了一个“无效语法”的错误:
results.extend(re.findall("<a href="/%201D([^/%201D]*)/%201D">class=(?:1|s)",data.read()))
我对正则表达式(regex)还很陌生,所以我查了一些基础知识,感觉还挺简单的,但我还是不明白其中的/%201D是什么意思。我查了一下,发现那是一个字符代码的十六进制表示。我现在还是不知道怎么让这段代码正常运行。这里是其余的代码。我遇到问题的那一行是第36行。
这是这个函数:
import re, sys, os, urllib
### custom useragent ###
class AppURLopener(urllib.FancyURLopener):
version = "Mozilla/5.0(compatable;MSIE 9.0; Windows NT 6.1; Trident/5.0)"
urllib._urlopener = AppURLopener()
uopen = urllib.urlopen
uencode = urllib.urlencode
def google(query, numget=10, verbose=0):
numget = int(numget)
start = 0
results = []
if verbose == 2:
print("[+]Getting " + str(numget) + " results")
while len(results) < numget:
print("[+]" + str(len(results)) + " so far...")
data = uopen("https://www.google.com/search?q="+query+"&star="+str(start))
if data.code != 200:
print("Error " + str(data.code))
break
results.extend(re.findall("<a href="/%201D([^/%201D]*)/%201D">class=(?:1|s)",data.read()))
print(data.read())
start += 10
if verbose == 2:
print("[+] Got " + str(numget) + " results")
return results[:numget]
1 个回答
1
首先,你需要在 <a href="
中对引号 " 进行转义。
"<a href=\"/%201D([^/%201D]*)/%201D\">class=(?:1|s)"
其次,%20
在网址中表示一个空格,所以 %201D
就对应于 " 1D"
。