Как извлечь атрибуты title и href из вопросов на странице поиска reddit.com с помощью Selenium Python - PullRequest
0 голосов
/ 08 марта 2019

Я хочу очистить ссылку и заголовок всех вопросов на странице https://www.reddit.com/search?q=Expiration&type=link&sort=new. Элемент имеет следующую структуру:

<a data-click-id="body" class="SQnoC3ObvgnGjWt90zD9Z" href="/r/excel/comments/ayiahc/calculating_expiration_dates_previous_solution_no/">
    <h2 class="s1okktje-0 cDxKta">
        <span style="font-weight:normal">Calculating Expiration Dates - Previous Solution No Longer Works</span>
    </h2>
</a>

Я использую questions = driver.find_elements_by_xpath('//a[@data-click-id="body"]'), чтобы получить вопросы, затем итерируем их по for. И я могу использовать question.get_attribute('href'), чтобы получить ссылку.

Однако я не знаю, как извлечь заголовок внутри span (из question).

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

1 голос
/ 08 марта 2019

В селене

question.find_elements_by_xpath.('./h2/span').text

вернет текстовый элемент базового элемента span в вашем цикле for

с lxml

import requests
from lxml import html

UA = {'User-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0'}

page = requests.get('https://www.reddit.com/search?q=Expiration&type=link&sort=new',
                    headers = UA)

tree = html.fromstring(page.content)

questions = tree.xpath('//a[@data-click-id="body"]')

parsed_q = []

for question in questions:
    url = question.xpath('./@href')[0]
    title = question.xpath('./h2/span/text()')[0]
    print("Title: {} --- URL: {}".format(title,url))
    parsed_q.append(tuple([title,url]))

print(parsed_q)
1 голос
/ 08 марта 2019

Чтобы очистить атрибуты title и href всех вопросов на веб-странице , вам нужно вызвать WebDriverWait для visibility_of_all_elements_located() и вы можете использовать следующее решение:

0 голосов
/ 08 марта 2019

попробуйте ниже.

question.find_element_by_tag_name('span').text

или просто

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