Zeichnen Sie eine einfache Python-Crawler-Instanz auf

零到壹度
Freigeben: 2018-03-31 13:55:13
Original
6600 Leute haben es durchsucht

In diesem Artikel geht es hauptsächlich um die Aufzeichnung einer einfachen Python-Crawler-Instanz. Freunde, die es brauchen, können einen Blick darauf werfen.

Die Hauptprozesse sind:

Kriechen, Sortieren und Lagern

1 Es werden mehrere Pakete verwendet, darunter

requests, mit denen Anfragen an die Website gesendet und der Webseitencode abgerufen wird.

BeautifulSoup4, mit dem der erhaltene Webseitencode verarbeitet wird effektive Informationen extrahieren

Pandas wird zum Speichern von Informationen verwendet

Wenn to_excel('docname.xlsx'), benötigen Sie möglicherweise ein anderes Paket openpyxl

import requests
from bs4 import BeautifulSoup
import re
import json
import pandas
import excel
import sqlite3
# import openpyxl
Nach dem Login kopieren

2 . So crawlen Sie Sina Der verantwortliche Herausgeber jeder Nachricht auf der Website ist ein Beispiel

Die Funktionen von def können durch Rückwärtsberechnung ermittelt werden

Nach Erhalt der Webadresse der aktuellen Nachrichten , wie erhalte ich den verantwortlichen Redakteur?

d

ef getComments(url):
    # 向url对应网址发送请求,获取到的网页内容存储在res中
    res=requests.get(url)
    # 将res内容编码,编码的方式'utf-8'根据网页的charset而定
    res.encoding='utf-8'
    # 因为需要处理res,因此将文本存入soup
    # html.parser不清楚是干嘛的
    soup=BeautifulSoup(res.text,'html.parser')
    # 根据所需要的内容,通过BS4的select选择,得到数组,用[0]取出元素
    # 因为是文本所以直接通过.text得到所需要的内容
    return soup.select('.show_author')[0].text
# 在soup.select('.link')[0]中,若为id则带#
#                             若为class则带.
#                             其他的如a和h1等则无要求
#其中需要层层select并取[0]
#有些有多元素,则需通过for遍历
Nach dem Login kopieren

ii) So erhalten Sie die URL jeder Nachrichtenseite entsprechend der Hauptseite

Eine bestimmte Dateizeile wird in JSON gefunden, also Kommentare =requests. get('url') then

jd=json.loads(comments.text.strip('var data='))

jd=['result'][' count'] ['total'] ==> Dies ist das Wörterbuch im Wörterbuch, das in der Vorschau des Webseiteninspektionselements angezeigt werden kann.

==>gt;

was in einem Wörterbuch wiederhergestellt werden muss, alles, was am linken und rechten Ende überflüssig ist, sollte durch strip() entfernt werden

Einige müssen separat auf der linken und rechten Seite gelöscht werden, verwenden Sie lstrip() und rstrip(), also links und rechts

==> ;for ent in ~:

ent['url']

*** ) Wenn sich die von „supp.select()“ erhaltenen erforderlichen Elemente in derselben Klasse befinden, können Sie Inhalte[0] verwenden. Unterscheiden

***) Konvertierung zwischen Zeit und str

from datetime import date time
Str==>time        dt=datetime.strptime(timesource,’%Y%m%d’)
time==>Str        dt.strftime(‘%Y-%m-%d’)
Nach dem Login kopieren

***) Verbinde jedes Element von list[]

‘-‘.join(list) #将list中的各元素以-方式连接
‘’.join([p.text.strip() for p in soup.select(‘#artibody p’)[:-1]])
Nach dem Login kopieren

*** ) Für eine URL mit mehreren Seiten musst du den entsprechenden Teil der Seite finden und ihn in {}, <🎜 ändern >

und ersetzen Sie es dann durch format()

news_total=[]
for i in range(1,3):
    newsurl=url.format(i)
    newsary=parseListlink(newsurl)
    new_total.extend(newsary)
Nach dem Login kopieren

3. Verwenden Sie Pandas, um Daten zu speichern. Dabei handelt es sich um die DataFrame()-Funktionsfunktion

df=pandas.DataFrame(list)
print(df.head(20))  #显示前20条信息
df.to_excel(&#39;news.xlsx&#39;) #转存为excel格式,名字为news.xlsx
Nach dem Login kopieren
wobei das Format der Liste

for u in geturl(url):
    excel1 = [] # 循环开始清空数组
    result = {} # 循环开始清空字典
    try:
        # 每个条目在新字典赋值
        result[&#39;zeren&#39;]=getComments(u)
        result[&#39;id&#39;]=i
        i=i+1
    except:
        continue
    #每个条目形成数组
    excel1.append(result)
    #在列表中添加数组
    list.extend(excel1)
Nach dem Login kopieren

4 ist. Speicherdatenbank

df=pandas.DataFrame(list)
print(df.head(20))  #显示前20条信息
# df.to_excel(&#39;news.xlsx&#39;) #转存为excel格式,名字为news.xlsx
with sqlite3.connect(&#39;news.sqlite&#39;) as db:
    # 存入news.sqlite文件中的news表格
    df.to_sql(&#39;news&#39;,con=db)
    # 读取/查询news表格并将数据赋值给df2
    df2=pandas.read_sql_query(&#39;SELECT * FROM news&#39;,con=db)
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonZeichnen Sie eine einfache Python-Crawler-Instanz auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!