我正在尝试编写一个程序来检索在特定标记中具有活动奖励的问题的所有链接。我还没有实现特定的标记功能,因为我只是试图获取所有链接。
from re import findall
from urllib.request import urlopen
def fetch_source(url):
return str(urlopen(url).read())
site = 'http://stackoverflow.com/?tab=featured'
def fetch_links(source):
source = fetch_source(source)
return findall("\/questions\/[0-9]*\/(?:[A-z]|\-)+", source)
print(fetch_links(site))
这将获取许多链接,但它错过了很多链接,因为我的正则表达式只允许标题中的[A-z]|\-
。我不知道如何解决这个问题,因为有些问题在标题中有引号,如果我允许,我不知道问题链接何时结束?
我很抱歉对python不熟悉,但我只是想弄清楚。
答案 0 :(得分:3)
使用正则表达式对于通过特定标记获取问题将变得完全不可行。
你的正则表达式缺少很多标题是正确的,但在这种情况下使用findall确实不合适。 Beautiful soup,是一个更好的检索链接的工具,我建议你研究一下。
但是,在这种情况下,Stack Exchange API已经涵盖了您。
对于类似的问题,只需通过API documentation搜索(或Google),直到您看到自己正在寻找的功能featured question。
输入您想要的参数,API将显示生成链接:
https://api.stackexchange.com/2.2/questions/featured?order=desc&sort=votes&tagged=python&site=stackoverflow
检索所有功能Python问题的示例