我怎样才能确保我在某个特定网站的关于我们页面

时间:2016-04-23 20:55:06

标签: python request beautifulsoup web-crawler logic

这是一段代码,我试图用它来检索网页上给定主页网址的所有链接。

import requests
from BeautifulSoup import BeautifulSoup

url = "https://www.udacity.com"
response = requests.get(url)
page = str(BeautifulSoup(response.content))


def getURL(page):

    start_link = page.find("a href")
    if start_link == -1:
        return None, 0
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1: end_quote]
    return url, end_quote

while True:
    url, n = getURL(page)
    page = page[n:]
    if url:
        print url
    else:
        break

结果是

/uconnect
#
/
/
/
/nanodegree
/courses/all
#
/legal/tos
/nanodegree
/courses/all
/nanodegree
uconnect
/
/course/machine-learning-engineer-nanodegree--nd009
/course/data-analyst-nanodegree--nd002
/course/ios-developer-nanodegree--nd003
/course/full-stack-web-developer-nanodegree--nd004
/course/senior-web-developer-nanodegree--nd802
/course/front-end-web-developer-nanodegree--nd001
/course/tech-entrepreneur-nanodegree--nd007
http://blog.udacity.com
http://support.udacity.com
/courses/all
/veterans
https://play.google.com/store/apps/details?id=com.udacity.android
https://itunes.apple.com/us/app/id819700933?mt=8
/us
/press
/jobs
/georgia-tech
/business
/employers
/success
#
/contact
/catalog-api
/legal
http://status.udacity.com
/sitemap/guides
/sitemap
https://twitter.com/udacity
https://www.facebook.com/Udacity
https://plus.google.com/+Udacity/posts
https://www.linkedin.com/company/udacity

Process finished with exit code 0

我想获得一个网站的“关于我们”页面的网址,这个网页在许多情况下都有所不同,例如

对于Udacity,它是https://www.udacity.com/us

对于artscape-in​​c,它是https://www.artscape-inc.com/about-decorative-window-film/

我的意思是,我可以尝试在网址中搜索“关于”这样的关键字,但正如我所说,我可能已经错过了这种方法中的udacity。有人能提出任何好的方法吗?

1 个答案:

答案 0 :(得分:1)

要涵盖“关于我们”页面链接的每个可能变体并不容易,但这是最初的想法,可以在您展示的两种情况下都有效 - 检查{{1}内的“约” }属性和href元素的文本:

a

用法:

def about_links(elm):
    return elm.name == "a" and ("about" in elm["href"].lower() or \
                                "about" in elm.get_text().lower())

您还可以做些什么来减少误报的数量,只检查页面的“页脚”部分。例如。找到soup.find_all(about_links) # or soup.find(about_links) 元素,或带footerid="footer"类的元素。

另一种“外包”“关于我们”页面定义的想法是谷歌(当然是从你的脚本)“关于”+“网页网址”并获取第一个搜索结果。

作为旁注,我注意到您仍在使用BeautifulSoup version 3 - 它没有被开发和维护,您应该尽快切换到BeautifulSoup 4 ,通过以下方式安装:

footer

并将导入更改为:

pip install --upgrade beautifulsoup4