坚持这个任务

时间:2016-02-11 01:53:47

标签: python

来自在线python课程: 您将获得一个包含100个名字的网站。所有名称都以链接的形式出现。每个链接指向另外100个链接。您必须使用python选择第7个链接7次,然后打印出结果。 我的代码到目前为止:

$key_count = 0;
foreach ($result['items_to_receive'] as $item ) {
    if ( stripos( $item['name'], 'key' ) ) {
        $key_count++;
    }
}

它不起作用。它不断给我相同的链接...

这是输出:

z = 0
atags = []
listurl = []
#import modules
import urllib 
from bs4 import BeautifulSoup
import re
newurl = "https://pr4e.dr-chuck.com/tsugi/mod/python-data/data/known_by_Desmond.html"
while z < 7:
    url = newurl
    z = z + 1
    html = urllib.urlopen(url).read()
    soup = BeautifulSoup(html)
    soup.find_all("url")
    a = soup.find_all('a')
    for x in a:
        atags.append(str(x)) 
    url_end_full = atags[19]
    url_end = re.findall(r'"(.*?)"', url_end_full)
    url_end = str(url_end[0])
    newurl = 'https://pr4e.dr-chuck.com/tsugi/mod/python-data/data/' + url_end  
    str(newurl)
    listurl.append(newurl)
    url = newurl        
print url 

当我将答案输入答案框时,答案是错误的。

1 个答案:

答案 0 :(得分:1)

有几个问题。

  1. atags[19]不是第18项,它是第20项(lst[0]是列表中的第一项)。

  2. soup.find_all("url")什么都不做;摆脱它。

  3. 您不需要re

  4. 返回的链接是相对的;你正在对基本路径进行硬连接以使它们成为绝对路径。 在这种情况下它起作用,但这是运气问题;使用urljoin

  5. 做正确的事
  6. 虽然str(link)确实为您提供了网址,但&#34;正确的&#34;方法是通过索引属性,即link['href']

  7. 通过一些明智的清理,

    from bs4 import BeautifulSoup
    import sys
    
    # version compatibility shim
    if sys.hexversion < 0x3000000:
        # Python 2.x
        from urlparse import urljoin
        from urllib import urlopen
    else:
        # Python 3.x
        from urllib.parse import urljoin
        from urllib.request import urlopen
    
    START_URL = "https://pr4e.dr-chuck.com/tsugi/mod/python-data/data/known_by_Desmond.html"
    STEPS = 7
    ITEM = 18
    
    def get_soup(url):
        with urlopen(url) as page:
            return BeautifulSoup(page.read(), 'lxml')
    
    def main():
        url = START_URL
        for step in range(STEPS):
            print("\nStep {}: looking at '{}'".format(step, url))
            # get the right item (Python arrays start indexing at 0)
            links = get_soup(url).find_all("a")
            rel_url = links[ITEM - 1]["href"]
            # convert from relative to absolute url
            url = urljoin(url, rel_url)
            print("  go to '{}'".format(url))
    
    if __name__=="__main__":
        main()
    

    如果我做得对,那么以known_by_Gideon.html

    结尾