我是Python的新手,对我所掌握的图书馆数量印象深刻。我有一个函数已经使用Beautiful Soup从站点中提取URL,但并非所有这些都是相关的。我只想在同一个网站(域或子域,但没有其他域)上使用网页(无媒体)。我尝试手动编写我遇到的示例,但我觉得我正在重新发明轮子 - 这肯定是互联网应用程序中的常见问题。
以下是我可能从网站上检索的网址示例列表,例如http://example.com,其中包含我是否需要这些网址以及原因的标记。希望这说明了这个问题。
好:
example.com/page
- 它链接到同一域中的另一个页面example.com/page.html
- 文件类型已结束,但它是一个HTML页面subdomain.example.com/page.html
- 它位于同一网站上,但位于子域名/about/us
- 它是一个相对链接,所以它没有域名,但暗示为:
otherexample.com/page
- 糟糕,域名不匹配example.com/image.jpg
- 糟糕,不是图片,不是网页/
- 糟糕 - 有时只会在" a"中出现斜线。标记,但这是对我已经在#anchor
- 这也是一个相对链接,但它位于同一页面上,所以不需要它我已经在if
陈述中为每个案例撰写案例......但必须有更好的方法!
编辑:这是我当前的代码,它不会返回任何内容:
ignore_values = {"", "/"}
def desired_links(href):
# ignore if href is not set
if not href:
return False
# ignore if it is just a link to the same page
if href.startswith("#"):
return False
# skip ignored values
if href in ignore_values:
return False
def explorePage(pageURL):
#Get web page
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open(pageURL)
html = response.read()
#Parse web page for links
soup = BeautifulSoup(html, 'html.parser')
links = [a["href"] for a in soup.find_all("a", href=desired_links)]
for link in links:
print(link)
return
def main():
explorePage("http://xkcd.com")
答案 0 :(得分:2)
BeautifulSoup
可以非常灵活地帮助您创建属性值并将其应用于属性值。您可以创建https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/#daemon-mode并将其用作href
的{{1}}参数的值。
例如,您可以从以下内容开始:
find_all()
用法:
ignore_values = {"", "/"}
def desired_links(href):
# ignore if href is not set
if not href:
return False
# ignore if it is just a link to the same page
if href.startswith("#"):
return False
# skip ignored values
if href in ignore_values:
return False
# TODO: more rules
# you would probably need "urlparse" package for a proper url analysis
return True
您应该查看links = [a["href"] for a in soup.find_all("a", href=desired_links)]
及其filtering function。