Heim  >  Artikel  >  Backend-Entwicklung  >  Wie crawlt Python Artikel von prose.com?

Wie crawlt Python Artikel von prose.com?

零下一度
零下一度Original
2017-07-03 09:39:311562Durchsuche

image.png

Konfigurieren Sie Python 2.7

    bs4

    requests

Installieren Sie mit pip, um sudo pip install zu installieren bs4

Sudo Pip-Installationsanfragen

Erläutern Sie kurz die Verwendung von bs4. Da es sich um das Crawlen von Webseiten handelt, werde ich find und find_all vorstellen.

Der Unterschied zwischen find und find_all ist dass die zurückgegebenen Dinge unterschiedlich sind. find gibt das erste übereinstimmende Tag und den Inhalt im Tag zurück

find_all gibt eine Liste zurück

Zum Beispiel schreiben wir eine test.html, um den Unterschied zwischen find zu testen und find_all. Der Inhalt ist:

<html>
<head>
</head>
<body>
<div id="one"><a></a></div>
<div id="two"><a href="#">abc</a></div>
<div id="three"><a href="#">three a</a><a href="#">three a</a><a href="#">three a</a></div>
<div id="four"><a href="#">four<p>four p</p><p>four p</p><p>four p</p> a</a></div>
</body>
</html>

 <br/>

Dann lautet der Code von test.py:

from bs4 import BeautifulSoup
import lxml

if __name__==&#39;__main__&#39;:
  s = BeautifulSoup(open(&#39;test.html&#39;),&#39;lxml&#39;)
  print s.prettify()
  print "------------------------------"
  print s.find(&#39;div&#39;)
  print s.find_all(&#39;div&#39;)
  print "------------------------------"
  print s.find(&#39;div&#39;,id=&#39;one&#39;)
  print s.find_all(&#39;div&#39;,id=&#39;one&#39;)
  print "------------------------------"
  print s.find(&#39;div&#39;,id="two")
  print s.find_all(&#39;div&#39;,id="two")
  print "------------------------------"
  print s.find(&#39;div&#39;,id="three")
  print s.find_all(&#39;div&#39;,id="three")
  print "------------------------------"
  print s.find(&#39;div&#39;,id="four")
  print s.find_all(&#39;div&#39;,id="four")
  print "------------------------------"

 <br/>

Nach dem Ausführen können wir das Ergebnis sehen. Beim Abrufen einer Gruppe von Tags wird der Unterschied zwischen den beiden angezeigt .


image.png

Wir müssen also darauf achten, was wir wollen, wenn wir es verwenden, sonst erscheint ein Fehler
Der nächste Schritt besteht darin, die Webseiteninformationen durch Anfragen zu erhalten. Ich verstehe nicht sehr gut, warum andere über Gehörte und andere Dinge schreiben.
Ich habe direkt auf die Webseite zugegriffen und die Webseiten der zweiten Ebene mehrerer Kategorien zum Thema Prosa erhalten. com durch get-Methode und habe dann einen Gruppentest bestanden, um alle Webseiten zu crawlen

def get_html():
  url = ""
  two_html = ['sanwen','shige','zawen','suibi','rizhi','novel']  for doc in two_html:
      i=1          if doc=='sanwen':print "running sanwen -----------------------------"  if doc=='shige':print "running shige ------------------------------"  if doc=='zawen':print 'running zawen -------------------------------'  if doc=='suibi':print 'running suibi -------------------------------'  if doc=='rizhi':print 'running ruzhi -------------------------------'  if doc=='nove':print 'running xiaoxiaoshuo -------------------------'  while(i<10):
        par = {'p':i}
        res = requests.get(url+doc+'/',params=par)if res.status_code==200:
          soup(res.text)
              i+=i

 <br/>

In diesem Teil des Codes habe ich das nicht getan Verarbeiten Sie den res.status_code, der nicht 200 ist. Das daraus resultierende Problem besteht darin, dass der Fehler nicht angezeigt wird und der gecrawlte Inhalt verloren geht. Dann habe ich die Webseite von Sanwen.net analysiert und festgestellt, dass es sich um www.sanwen.net/rizhi/&p=1 handelt.
Der Maximalwert von p beträgt 10. Ich verstehe nicht. Das letzte Mal, als ich die Festplatte gecrawlt habe. Es waren 100 Seiten. Ich werde es später analysieren. Rufen Sie dann den Inhalt jeder Seite über die get-Methode ab.
Nachdem der Inhalt jeder Seite abgerufen wurde, müssen der Autor und der Titel analysiert werden.

def soup(html_text):
  s = BeautifulSoup(html_text,'lxml')
  link = s.find('div',class_='categorylist').find_all('li')  for i in link:if i!=s.find('li',class_='page'):
      title = i.find_all('a')[1]
      author = i.find_all('a')[2].text
      url = title.attrs['href']
      sign = re.compile(r'(//)|/')
      match = sign.search(title.text)
      file_name = title.text      if match:
        file_name = sign.sub('a',str(title.text))

 <br/>

Da Wenn es um den Titel geht, möchte ich Sie fragen, warum Sie nicht nur einen, sondern auch zwei Schrägstriche im Dateinamen hinzugefügt haben Später habe ich einen regulären Ausdruck geschrieben und werde ihn Ihnen geben. Ändern Sie Ihre Karriere.
Der letzte Schritt besteht darin, den Prosainhalt durch die Analyse jeder Seite zu erhalten, die Artikeladresse zu erhalten und dann den Inhalt direkt durch Ändern der Webseitenadresse zu erhalten. Das erspart Ärger.

def get_content(url):
  res = requests.get(''+url)  if res.status_code==200:
    soup = BeautifulSoup(res.text,'lxml')
    contents = soup.find('div',class_='content').find_all('p')
    content = ''for i in contents:
      content+=i.text+'\n'return content

 <br/>

Schreiben Sie abschließend die Datei und speichern Sie sie in Ordnung

   f = open(file_name+'.txt','w')      print 'running w txt'+file_name+'.txt'  f.write(title.text+'\n')
      f.write(author+'\n')
      content=get_content(url)     
      f.write(content)
      f.close()

Es gibt drei Funktionen, um Prosa von Prose.com zu erhalten, aber das Problem ist, dass ich nicht weiß, warum einige Artikel verloren gehen die Artikel von Prose.com, aber ich habe sie Seite für Seite gelesen. Ich hoffe, jemand kann mir bei dieser Frage helfen. Vielleicht sollten wir die Webseite unzugänglich machen. Natürlich denke ich, dass es etwas mit dem kaputten Netzwerk in meinem Wohnheim zu tun hat

     f = open(file_name+'.txt','w')      print 'running w txt'+file_name+'.txt'  f.write(title.text+'\n')
      f.write(author+'\n')
      content=get_content(url)     
      f.write(content)
      f.close()

Ich hätte es fast vergessen über das Rendering

Obwohl der Code chaotisch ist, höre ich nie auf


Das obige ist der detaillierte Inhalt vonWie crawlt Python Artikel von prose.com?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn