Получить список элементов в отдельные массивы - PullRequest
0 голосов
/ 28 мая 2019

Здравствуйте, коллега-разработчик,

Я новичок в Python и мне нужно написать веб-скребок для сбора информации из Google Ученого.

В итоге я написал код этой функции, чтобы получитьзначения с использованием Xpath:

thread = browser.find_elements(By.XPATH,(" %s" % exp))
xArray = []

for t in thread:
    if not atr:
        xThread = t.text 
    else:
        xThread = t.get_attribute('href')

    xArray.append(xThread)

    return xArray

Я не знаю, хорошее это или плохое решение.Итак, я смиренно принимаю любые предложения, чтобы заставить его работать лучше.

В любом случае, моя настоящая проблема заключается в том, что я получаю имена всех авторов со страницы, которую я собираю, и что мне действительно нужно, так это имена, сгруппированные по результатам,Когда я прошу напечатать результаты, я хотел бы получить что-то вроде этого:

[[author1, author2,author 3],[author 4,author 5,author6]]

Что я получаю прямо сейчас:

[author1,author3,author4,author5,author6]

Структура выглядит следующим образом:

<div class="gs_a">
    LR Hisch,
<a href="/citations?user=xuBuLKYAAAAJ&amp;hl=es&amp;oi=sra">AM Gobin</a>
    ,AR Lowery,
<a href="/citations?user=ziumTX0AAAAJ&amp;hl=es&amp;oi=sra">F Tam</a>
 ... -Annals of biomedical ...,2006 - Springer
</div>

И одна и та же структура повторяется по всей странице для разных документов и авторов.

И это вызов функции, который я объяснил ранее:

authors = (clothoSpins(".//*[@class='gs_a']//a"))

Который достает мне весь список авторов.

1 Ответ

0 голосов
/ 29 мая 2019

Вот логика (используется селен в приведенном ниже коде, но обновите его в соответствии с вашими потребностями).

Логика:

url = "https://scholar.google.com/scholar?hl=en&as_sdt=0%2C21&q=python&btnG="
driver.get(url)
# get the authors and add to list
listBooks = []
books = driver.find_elements_by_xpath("//div[@class='gs_a']")
for bookNum in range(len(books)):
    auths = []
    authors = driver.find_elements_by_xpath("(//div[@class='gs_a'])[%s]/a|(//div[@class='gs_a'])[%s]/self::*[not(a)]"%(bookNum+1,bookNum+1))
    for author in authors:
        auths.append(author.text)
    listBooks.append(auths)

Выход:

[['F Pedregosa', 'G Varoquaux', 'A Gramfort'], ['PD Adams', 'PV Afonine'], ['TE Oliphant'], ['JW Peirce'], ['S Anders', 'PT Pyl', 'W Huber'], ['MF Sanner'], ['S Bird', 'E Klein'], ['M Lutz - 2001 - books.google.com'], ['G Rossum - 1995 - dl.acm.org'], ['W McKinney - … of the 9th Python in Science Conference, 2010 - pdfs.semanticscholar.org']]

Скриншот: enter image description here

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