1

Ich möchte die Website verschrotten:Schrott der Artikel mit Python 3.4 und BeautifulSoup, Anfragen

https://xueqiu.com/yaodewang 

Und ich will alle seine Artikel verschrotten .i BeautifulSoup und Gesuche so verwendet:

import requests 
from bs4 import BeautifulSoup 
url = 'https://xueqiu.com/yaodewang' 
header = {'user-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'} 
r = requests.get(url,headers = header).content 
soup = BeautifulSoup(r,'lxml') 
artile = soup.find_all('ul',{'class':'status-list'}) 
print(artile) 

Das Ergebnis ist nichts Es ist Rückkehr:

[] 

SO, ich weitere Regeln wie diese tyr:

# art = soup.find_all('div',{'class':'allStatuses no-head'}) 
# art = soup.find_all('div',{'class':'status_bd'}) 
# art = soup.find_all('div',{'class':'status_content container active tab-pane'}) 

Aber es gibt einige Wörter zurück, die nicht richtig sind. Ich möchte diesen Inhalt wie diesen enter image description here

Ich brauche deine Hilfe, vielen Dank!

Antwort

1

Die gewünschten Daten befinden sich nicht innerhalb des Elements mit status-list Klasse. Wenn Sie die Quelle überprüfen würde, würden Sie einen leeren Behälter statt finden:

<div class="status_bd"> 
    <div id="statusLists" class="allStatuses no-head"></div> 
</div> 

Stattdessen werden die Zustände im Inneren des script Element, das Sie suchen müssen, extrahieren Sie das gewünschte Objekt, Last von JSON in ein Python-Wörterbuch und extrahieren Sie die gewünschten Informationen:

import json 
import re 
import requests 
from bs4 import BeautifulSoup 

url = 'https://xueqiu.com/yaodewang' 
headers = { 
    'user-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36' 
} 
r = requests.get(url, headers=headers).content 
soup = BeautifulSoup(r, 'lxml') 

pattern = re.compile(r"SNB\.data\.statuses = ({.*?});", re.MULTILINE | re.DOTALL) 
script = soup.find("script", text=pattern) 

data = json.loads(pattern.search(script.text).group(1)) 
for item in data["statuses"]: 
    print(item["description"]) 

Drucke:

The best advice: Remember common courtesy and act toward others as you want them to act toward you. 
Lighten up! It&#39;s the weekend. we&#39;re just having a little fun! Industrial Bank is expected to rise,next week... 
... 
点.点.点... 点到这个,学位、学历、成绩单翻译一下要50块、100块的... 
+0

Danke sehr much.It ist ein Recht methlod Aber, ich will wissen, ob ich die conten kennen! t ist durch das Skript lokalisiert, wie ich den Regulären Ausdruck wie folgt finde: pattern = re.compile (r "SNB \ .data \ .statuses = ({. *?});", re.MULTILINE | re.DOTALL) –

+0

Eine andere Frage: Ich möchte die Liste der Artiles bekommen, aber jetzt habe ich eine Zeichenfolge.Ich möchte wie dieses Ergebnis erhalten = [str01, str02 .....] –

+0

@championCh sicher, nur Extrahieren Sie den Skripttext und arbeiten Sie damit, sagen wir, [regex101] (https://regex101.com/). Was Ihre zweite Frage betrifft, so denke ich, dass Sie die Ergebnisse in eine Liste schreiben wollen: 'articles = [item [" description "] für den Artikel in den Daten [" status "]]'. Ich hoffe, das hilft. – alecxe