Может кто-нибудь объяснить мне подробно, как этот код работает относительно (Использование Python для доступа к веб-данным) - PullRequest
0 голосов
/ 27 февраля 2019

Используйте urllib для чтения HTML из файлов данных ниже, извлечения href = vaues из тегов привязки, сканирования тега, который находится в определенной позиции относительно имени в списке, перейдите по этой ссылке и повторитеобработайте несколько раз и сообщите фамилию, которую вы найдете.

Это HTML-ссылка для данных http://py4e -data.dr-chuck.net / known_by_Caragh.html

Поэтому мне нужно найти ссылку в позиции 18 (первое имя 1).Перейдите по этой ссылке.Повторите этот процесс 7 раз.Ответ - фамилия, которую вы получите.

  1. Может ли кто-нибудь построчно объяснить мне, как работают эти 2 цикла («Пока» и «для»).
  2. Итак, когда я вхожу в Позити 18, он извлекает 18-ю строку тега href, а затем в следующую 18-ю, так 7 раз?Потому что даже если я введу другой номер, я все равно получу тот же ответ.Заранее большое спасибо.

Код:

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
n = 0
count = 0
url = input("Enter URL:")
numbers  = input("Enter count:")
position = input("Enter position:")

while n < 7:
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup('a')
    for tag in tags:
      count = count + 1
      if count == 18:
         url  = tag.get('href', None)
         print("Retrieving:" , url)
         count = 0
         break
n = n + 1

1 Ответ

0 голосов
/ 27 февраля 2019

Потому что даже если я введу другой номер, я все равно получу тот же ответ.

Вы получите тот же ответ, потому что вы жестко закодировали его с помощью:

while n < 7

и

if count == 18

Я думаю, вы хотели иметь их в качестве своей переменной / ввода.При этом вам также понадобятся эти входные данные как int, так как в настоящее время они хранятся как str.Также просто обратите внимание, я не хотел вводить URL каждый раз, так жестко это закодировано, но вы можете раскомментировать свой ввод там, а затем закомментировать url = 'http://py4e-data.dr-chuck.net/known_by_Caragh.html'

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

n = 0
count = 0

url = 'http://py4e-data.dr-chuck.net/known_by_Caragh.html'
#url = input("Enter URL:")

numbers  = int(input("Enter count:"))
position = int(input("Enter position:"))

while n < numbers:    #<----- there's your variable of how many times to try
    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup('a')
    for tag in tags:
      count = count + 1
      if count == position:  #<------- and the variable to get the position
         url  = tag.get('href', None)
         print("Retrieving:" , url)
         count = 0
         break
    n = n + 1    #<---- I fixed your indentation. The way it was previously would never get yourself out of the while loop because n will never increment.
...