Как распечатать атрибуты href с помощью Beautifulsoup при автоматизации через селен? - PullRequest
0 голосов
/ 15 сентября 2018

blue element is what i want to access for web scrapping

Значение href для синего элемента - это то, к чему я хочу получить доступ из этого HTML

Я пробовал несколько способов напечатать ссылку, но не работал.

Мой код ниже: -

discover_page = BeautifulSoup(r.text, 'html.parser')

finding_accounts = discover_page.find_all("a", class_="author track")
print(len(finding_accounts))

finding_accounts = discover_page.find_all('a[class="author track"]')
print(len(finding_accounts))

accounts = discover_page.select('a', {'class': 'author track'})['href']
print(len(accounts))

Output:- 
0
0
TypeError: 'dict' object is not callable

URL-адрес веб-страницы: https://society6.com/discover но URL изменится на https://society6.com/society?show=2 после входа в мою учетную запись

Что я здесь не так делаю?

примечание: - Я использую браузер Selen Chrome здесь. Ответ, данный здесь, работает в моем терминале, но не при запуске файла

Мой полный код: -

from selenium import webdriver
import time
import requests
from bs4 import BeautifulSoup
import lxml

driver = webdriver.Chrome()
driver.get("https://society6.com/login?done=/")
username = driver.find_element_by_id('email')
username.send_keys("exp4money@gmail.com")
password = driver.find_element_by_id('password')
password.send_keys("sultan1997")
driver.find_element_by_name('login').click()

time.sleep(5)

driver.find_element_by_link_text('My Society').click()
driver.find_element_by_link_text('Discover').click()

time.sleep(5)

r = requests.get(driver.current_url)
r.raise_for_status()

'''discover_page = BeautifulSoup(r.html.raw_html, 'html.parser')

finding_accounts = discover_page.find_all("a", class_="author track")
print(len(finding_accounts))

finding_accounts = discover_page.find_all('a[class="author track"]')
print(len(finding_accounts))


links = []
for a in discover_page.find_all('a', class_ = 'author track'): 
        links.append(a['href'])
        #links.append(a.get('href'))

print(links)'''

#discover_page.find_all('a')

links = []
for a in discover_page.find_all("a", attrs = {"class": "author track"}): 
        links.append(a['href'])
        #links.append(a.get('href'))

print(links)

#soup.find_all("a", attrs = {"class": "author track"})'''

soup = BeautifulSoup(r.content, "lxml")
a_tags = soup.find_all("a", attrs={"class": "author track"})

for a in soup.find_all('a',{'class':'author track'}):
    print('https://society6.com'+a['href'])

коды в документации - это тот, который я использовал, экспериментируя с

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018
import requests
from bs4 import BeautifulSoup

data = requests.get('https://society6.com/discover')
soup_data = BeautifulSoup(data.content, "lxml")

for a in soup_data.find_all('a',{'class':'author track'}):
    print('https://society6.com'+a['href'])
0 голосов
/ 16 сентября 2018

По вашему вопросу для печати href из нужных элементов вы можете использовать только Селен , используя следующее решение:

0 голосов
/ 16 сентября 2018

Если вы хотите найти все ссылки, не пытаясь сделать это вручную в Beautifulsoup. Затем перейдите на запросов-HTML

Пример кода для захвата всех ссылок,

from requests_html import HTMLSession
from bs4 import BeautifulSoup

url = 'https://society6.com/discover'
session = HTMLSession(mock_browser=True)
r = session.get(url, headers={'User-Agent': 'Mozilla/5.0'})

print(r.html.links)
print(r.html.absolute_links)

soup = BeautifulSoup(r.html.raw_html, 'html.parser')
a_tags = soup.find_all("a", attrs={"class": "author track"})
for a_tag in a_tags:
    print(a_tag['href'])
...