Session cookie von Selenium übergeben - / bereitstellen für Parser (bs4)
Verfasst: Donnerstag 2. Juli 2020, 12:41
Hallo und guten Tag,
um für eine kleine Textanalyse* bei der ich Forenpostings logge voranzukommen, nehm ich mit selenium einen login Prozess vor. Dann parse ich mit BS4. Die Kombination allerdings läuft noch nicht einwandfrei.
Also: Der parser zielt darauf ab Konversations auf dem wp-forum ( z.B. : https://wordpress.org/support/plugin/wp-job-manager/ ) ... deren Ergebnisse ich am Ende dann in ein CSV-Format bringen will. Also ich denke dass es hier relativ gute wege gibt, die "Resultate" in ein CSV-Format zu bringen.
also es gibt die Teile:
a. Login via Selenium
b. Parsen mit bs4
zu a. ... der Login-Teil ...:
by the way: hier ein Demo-Default-login:_
zu b.
Das ist der Parserteil - der läuft, für sich genommen einwandfrei. Allerdings nicht in der Kombination mit dem seleniumbasierten login.
Das ist die Ausgabe des Parsers:
Der parser zielt darauf ab Konversations on wp-forums... die ich am Ende dann in ein CSV-Format bringen will. Also ich denke dass es hier relativ gute wege gibt, die "Resultate" in ein CSV-Format zu bringen.
Denke dass das mit der CSV-Ausgabe im Grunde geht mit der Requests-library oder ggf. auch urllib.
Das momentan eigentliche Problem: Das erste und im Moment aber tatsächlich triftigere Problem ist es, den Parserteil so anzuhängen an den Loginteil dass ich die Session verwenden kann. Das funktioniert im Moment irgendwie nicht korrekt. Da gibt es einen Abriss einen Abbruch.
Ich kann schlicht keine neue Session mit Requests erzeugen - es müsste im Grunde alles mit der session laufen die Selenium erzeugt. Allenfalls - könnte ich mit Selenium loggen - dann wenn das gelaufen ist - die session cookies dem parserteil übergeben und dann parsen.
Was meint Ihr denn!?
Freue mich auf einen Tipp.
say
Anhang:; * Zur kurzen Erläuterung des Hintergrunds des Vorhabens: Die Textanalyse zieht ab besser zu verstehen wie der Ideenaustausch und Wissenserwerb in den Supportforen vonstatten geht (vgl. auch https://flosshub.org/biblio )
um für eine kleine Textanalyse* bei der ich Forenpostings logge voranzukommen, nehm ich mit selenium einen login Prozess vor. Dann parse ich mit BS4. Die Kombination allerdings läuft noch nicht einwandfrei.
Also: Der parser zielt darauf ab Konversations auf dem wp-forum ( z.B. : https://wordpress.org/support/plugin/wp-job-manager/ ) ... deren Ergebnisse ich am Ende dann in ein CSV-Format bringen will. Also ich denke dass es hier relativ gute wege gibt, die "Resultate" in ein CSV-Format zu bringen.
also es gibt die Teile:
a. Login via Selenium
b. Parsen mit bs4
zu a. ... der Login-Teil ...:
by the way: hier ein Demo-Default-login:_
Code: Alles auswählen
login: pluginfan
pass: testpasswd123
Code: Alles auswählen
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import time
#--| Setup
options = Options()
#options.add_argument("--headless")
#options.add_argument("--window-size=1980,1020")
#options.add_argument('--disable-gpu')
browser = webdriver.Chrome(executable_path=r'C:\chrome\chromedriver.exe', options=options)
#--| Parse or automation
browser.get("https://login.wordpress.org/?locale=en_US")
time.sleep(2)
user_name = browser.find_element_by_css_selector('#user_login')
user_name.send_keys("the username ")
password = browser.find_element_by_css_selector('#user_pass')
password.send_keys("the pass")
time.sleep(5)
submit = browser.find_elements_by_css_selector('#wp-submit')[0]
submit.click()
# Example send page source to BeautifulSoup or selenium for parse
soup = BeautifulSoup(browser.page_source, 'lxml')
use_bs4 = soup.find('title')
print(use_bs4.text)
#print('*' * 25)
#use_sel = browser.find_elements_by_css_selector('div > div._1vC4OE')
#print(use_sel[0].text)
Code: Alles auswählen
#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup as BS
session = requests.Session()
session.headers.update({'User-Agent': 'Mozilla/5.0'}) # this page needs header 'User-Agent`
url = 'https://wordpress.org/support/plugin/participants-database/{}/'
for page in range(1, 3):
print('\n--- PAGE:', page, '---\n')
# read page with list of posts
r = session.get(url.format(page))
soup = BS(r.text, 'html.parser')
all_uls = soup.find('li', class_="bbp-body").find_all('ul')
for number, ul in enumerate(all_uls, 1):
print('\n--- post:', number, '---\n')
a = ul.find('a')
if a:
post_url = a['href']
post_title = a.text
print('text:', post_url)
print('href:', post_title)
print('---------')
# read page with post content
r = session.get(post_url)
sub_soup = BS(r.text, 'html.parser')
post_content = sub_soup.find(class_='bbp-topic-content').get_text(strip=True, separator='\n')
print(post_content)
Das ist die Ausgabe des Parsers:
Code: Alles auswählen
post: 1 ---
text: https://wordpress.org/support/topic/advanced-button-with-icon/
href: Advanced Button with Icon?
---------
is it not possible to create a button with a font awesome icon to left / right?
--- post: 2 ---
text: https://wordpress.org/support/topic/expand-collapse-block/
href: Expand / Collapse block?
---------
At the very bottom I have an expandable requirements.
Do you have a better block? I would like to use one of yours if poss.
The page I need help with:
--- post: 3 ---
text: https://wordpress.org/support/topic/login-form-not-formatting-correctly/
href: Login Form Not Formatting Correctly
---------
Getting some weird formatting with the email & password fields running on outside the form.
Tried on two different sites.
Thanks
..... [,,,,,] ....
--- post: 22 ---
Der parser zielt darauf ab Konversations on wp-forums... die ich am Ende dann in ein CSV-Format bringen will. Also ich denke dass es hier relativ gute wege gibt, die "Resultate" in ein CSV-Format zu bringen.
Code: Alles auswählen
- autor:
- text:
- url: - wenn denn im Thread ein URL gegeben ist..
etc.
Das momentan eigentliche Problem: Das erste und im Moment aber tatsächlich triftigere Problem ist es, den Parserteil so anzuhängen an den Loginteil dass ich die Session verwenden kann. Das funktioniert im Moment irgendwie nicht korrekt. Da gibt es einen Abriss einen Abbruch.
Ich kann schlicht keine neue Session mit Requests erzeugen - es müsste im Grunde alles mit der session laufen die Selenium erzeugt. Allenfalls - könnte ich mit Selenium loggen - dann wenn das gelaufen ist - die session cookies dem parserteil übergeben und dann parsen.
Was meint Ihr denn!?
Freue mich auf einen Tipp.
say
Anhang:; * Zur kurzen Erläuterung des Hintergrunds des Vorhabens: Die Textanalyse zieht ab besser zu verstehen wie der Ideenaustausch und Wissenserwerb in den Supportforen vonstatten geht (vgl. auch https://flosshub.org/biblio )