2016-06-28 11 views
1

Ich versuche HTML-Daten von der Website zu bekommen, aber data_table ist null zurückkehren und versuchen, den Code zu verfolgen, wenn ich versuche, Kopfdaten, um es html Kontext zurückbeautifulsoup find_all nicht div-Daten erhält

import requests 
    from bs4 import BeautifulSoup 
    import html.parser 
    from html.parser import HTMLParser 
    import time 
    from random import randint 
    import sys 
    from IPython.display import clear_output 
    import pymysql 

links = ['https://www.ptt.cc/bbs/Gossiping/index'+str(i+1)+'.html' for i in range(10)] 
    data_links=[] 

for link in links: 
    res = requests.get(link) 
    soup = BeautifulSoup(res.text.encode("utf-8"),"html.parser") 
    data_table = soup.findAll("div",{"id":"r-ent"}) 
    print(data_table) 
+1

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

Antwort

1

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) 
Verwandte Themen