Python 正则表达式语法错误

0 投票
1 回答
1377 浏览
提问于 2025-04-18 06:55

我正在测试一段来自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"

撰写回答