1

题目描述

在这个链接中,点击第三个超链进入一个类似页面,再点击第三个超链进入一个类似页面,进行4次。看第四次页面中第三个超链的名字是什么。
http://py4e-data.dr-chuck.net...

题目来源及自己的思路

我只能把第一个页面的超链都抓下来,但是如何跳转

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = input('Enter - ')
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')

tags = soup('a')
for tag in tags:

print(tag.get('href', None))

我们老师有以下提示,但我不知道怎么用。
$ python3 solution.py
Enter URL: http://py4e-data.dr-chuck.net...
Enter count: 4
Enter position: 3
Retrieving: http://py4e-data.dr-chuck.net...
Retrieving: http://py4e-data.dr-chuck.net...
Retrieving: http://py4e-data.dr-chuck.net...
Retrieving: http://py4e-data.dr-chuck.net...
Retrieving: http://py4e-data.dr-chuck.net...

你期待的结果是什么?实际看到的错误信息又是什么?

完全没思路。期待大神拯救!

2019-05-17 提问
1 个回答
0

已采纳

就按照题目的意思把代码写下来好了,用while

In [22]: import requests

In [23]: from bs4 import BeautifulSoup

In [24]: def return_url(url, loop_count, link_count):
    ...:     i = 0
    ...:     while i < loop_count:  # 循环次数
    ...:         r = requests.get(url)
    ...:         data = r.text
    ...:         soup = BeautifulSoup(data)
    ...:         count = 0
    ...:         for link in soup.find_all('a'):
    ...:             count += 1
    ...:             if count == link_count: # 第几个链接
    ...:                 url = link.get('href',None)
    ...:                 break
    ...:         i += 1
    ...:     return url
1

感谢大神,根据您的思路。我把代码优化了一下,跑出结果来了:

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = input("enter-:")

i = 0
while i < 4:

html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
count = 0
for link in soup.find_all('a'):
    count = count+1
    if count == 3:
        url = link.get('href', None)
        i = i + 1
print(url)

赵大宝 · 5月19日

添加评论

撰写答案

推广链接