Wenn Sie die Seite in Ihrem Browser besuchen, müssen Sie bestätigen, dass Sie über 18 sind, bevor Sie den eigentlichen Inhalt erreichen, so dass die Seite, die Sie erhalten, so einen Beitrag zu https://www.ptt.cc/ask/over18
mit den Daten yes=yes
und from = "/bbs/Gossiping/index{the_number}.html"
, Sie können das Formular sehen, wenn Sie die zurückgegebene Quelle ausdrucken.
<form action="/ask/over18" method="post">
<input type="hidden" name="from" value="/bbs/Gossiping/index1.html">
<div class="over18-button-container">
<button class="btn-big" type="submit" name="yes" value="yes">我同意,我已年滿十八歲<br><small>進入</small></button>
</div>
<div class="over18-button-container">
<button class="btn-big" type="submit" name="no" value="no">未滿十八歲或不同意本條款<br><small>離開</small></button>
</div>
</form>
Auch gibt es keine heißt r-ent auf der Seite gibt es nur divs:
import requests
from bs4 import BeautifulSoup
links = ['https://www.ptt.cc/bbs/Gossiping/index{}.html' for i in range(1,11)]
data_links = []
data = {"yes":"yes"}
head = {"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"}
for ind, link in enumerate(links, 1):
with requests.Session() as s:
data["from"] = "/bbs/Gossiping/index{}.html".format(ind)
s.post("https://www.ptt.cc/ask/over18", data=data, headers=head)
res = s.get(link, headers=head)
soup = BeautifulSoup(res.text,"html.parser")
data_divs= soup.select("div.r-ent")
print(data_divs)
Der obige Code bekommt man alle divs mit der Klasse r-ent
.
Es ist wahrscheinlich in Ordnung, nur einmal eine Sitzung zu senden, da die Cookies gespeichert werden, so dass der folgende Code gut funktionieren sollte.
links = ['https://www.ptt.cc/bbs/Gossiping/index{}.html' for i in range(1,11)]
data_links=[]
data = {"yes":"yes"}
head = {"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"}
with requests.Session() as s:
data["from"] = "/bbs/Gossiping/index1.html"
s.post("https://www.ptt.cc/ask/over18", data=data, headers=head)
for link in links:
res = s.get(link, headers=head)
BeautifulSoup(res.text,"html.parser")
data_divs= soup.select("div.r-ent")
print(data_divs)
können Sie die HTML-Struktur einfügen, von wo Sie die Daten abrufen möchten. Überprüfen Sie auch den "res" -Wert, den Sie von der Get-Request-Antwort erhalten. – min2bro