Изменить одно значение в строке URL - PullRequest
0 голосов
/ 05 ноября 2019

Я изучаю веб-скребинг и тренируюсь на example.webscraping.com. Я могу извлечь нужную информацию с одной страницы, но я хотел бы знать, как перебрать несколько страниц самым простым способом. Я использовал подход, чтобы просто использовать отформатированную строку, поскольку единственное различие между страницами - это значение в конце URL-адреса "http://example.webscraping.com/places/default/index/1".

Однако, даже создав целое число и попытавшись ввести его какстрока в URL, в которой есть счетчик для изменения URL после каждого полного цикла цикла, мне не повезло. Я понимаю, что это может быть не общепринятым способом сделать это, но я не знаю других способовПомимо создания словаря и попытки сделать это, но это похоже на открытие еще одной банки с червями. Любой совет с радостью принят, извините, если это обсуждалось ранее, но все посты, которые я нашел, являются слишком сложными для меня, чтобы понять, какновичок. Кроме того, webloop - это функция, в которой я использую цикл for для извлечения всех данных, которые я хочу получить с сайта. Спасибо за ваши предложения. Для дальнейшего использования, если я хочу просмотреть сайт, такой как ebay иамазонка с тем же запросом и просто изменить его после каждого цикла, что лучшеметод подхода?

from bs4 import BeautifulSoup as smoothie
def webloop():
    for results in soup.find('div', id='results').find_all('div'):      
      country = results.a.text
      flag = results.a.img
      print (country)
      print(flag)
      print()

pagenum = 1

while pagenum != 4:
    source =requests.get('http://example.webscraping.com/places/default/index/pagenum=%s').text %(str(pagenum))
    soup = smoothie(source, 'html.parser')
    webloop()
    pagenum += 1

Я намерен в цикле запрашивать новую страницу при каждой итерации, но получаю эту ошибку ValueError: неподдерживаемый символ формата 'Y' (0x59) с индексом 2159

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Существует проблема с форматированием строки, с Python 3.6 вы можете использовать f-строки , которые более читабельны

source = requests.get(f'http://example.webscraping.com/places/default/index/pagenum={pagenum}')

Есть и другие проблемы, такие как source.text ине source, а отсутствующие (в фрагменте кода, который вы опубликовали) webloop() функция.

from bs4 import BeautifulSoup as smoothie
import requests

for pagenum in range(1, 4):
    source = requests.get(f'http://example.webscraping.com/places/default/index/pagenum={pagenum}')
    soup = smoothie(source.text, 'html.parser')
    webloop()
0 голосов
/ 05 ноября 2019

Я не совсем уверен, если это ваша проблема, но код вашего вопроса имеет неправильное форматирование строки. И я понятия не имею, что webloop() здесь? Кроме того, на этой странице примеров веб-страниц кажется, что ее номера страниц начинаются с 0, а не 1.

from bs4 import BeautifulSoup as smoothie

pagenum = 1

while pagenum != 4:
    source =requests.get('http://example.webscraping.com/places/default/index/pagenum={}'.format(pagenum))
    soup = smoothie(source.text, 'html.parser')
    webloop()
    pagenum += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...