python beautifulsoup - как перейти на следующую страницу, пока на следующей странице нет уникального адреса - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь написать веб-сканер, используя Beautifulsoup для извлечения имен генов из https://www.ncbi.nlm.nih.gov/gene/?term=Celiac+disease

Мой код может получить желаемый результат с первой страницы, но я не знаю, как написатькод для перехода моей программы на следующую страницу.После нажатия кнопки «Далее» я получаю новый адрес, который не имеет ничего общего с предыдущей страницей.Например, первая страница имеет адрес https://www.ncbi.nlm.nih.gov/gene/?term=Celiac+disease,, но адрес следующей страницы - https://www.ncbi.nlm.nih.gov/gene (хотя все еще отображаются результаты, связанные с целиакией, хотя)

Я посмотрел в Google иstackoverflow, чтобы увидеть, есть ли какие-либо статьи, связанные с этой проблемой.Но я мог только найти статьи о страницах с похожими адресами и (для меня) логически следить за их треками.

from bs4 import BeautifulSoup
from urllib.request import urlopen

gene_result = []

url = "https://www.ncbi.nlm.nih.gov/gene/?term=Celiac+disease"
html = urlopen(url).read()
soup = BeautifulSoup(html, "html5lib")

tbody = soup.find("tbody")
a_href = tbody.find_all("a")

for x in a_href:
    gene = x.contents[0]
    gene_result.append(gene)

print(gene_result)

Код отлично работает, сканируя первую страницу, и я получил хороший результат:

['CTLA4', 'HLA-DQA1', 'IL2', 'IL21', 'CCR3', 'CELIAC2', 'ATXN2', 'SH2B3', 'HLA-DQB1', 'CELIAC5', 'TAGAP', 'CELIAC7', 'CELIAC13', 'CELIAC12', 'CELIAC11', 'CELIAC10', 'CELIAC9', 'CELIAC8', 'CELIAC6', 'KIAA1109']

Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 29 декабря 2018

Для таких веб-сайтов вам нужно использовать что-то, называемое selenium webdriver с python.

Вам нужно будет смоделировать нажатие кнопки «Далее» через этот веб-драйвер из вашего кода Python.а затем прочитайте html_source в BeautifulSoup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...