Session cookie von Selenium übergeben - / bereitstellen für Parser (bs4)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
say_hello
User
Beiträge: 51
Registriert: Sonntag 14. Oktober 2012, 12:33

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:_

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)
zu b.

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 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:

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.
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 )
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@say_hello: Warum so umständlich? Wenn Du sowieso schon Selenium an Bord hast, dann verwende das doch einfach weiter.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten