ホームページ  >  記事  >  バックエンド開発  >  単純な Python クローラー インスタンスを記録する

単純な Python クローラー インスタンスを記録する

零到壹度
零到壹度オリジナル
2018-03-31 13:55:136629ブラウズ

この記事では主に、単純な Python クローラー インスタンスの記録に関する記事を共有します。必要な方はご覧ください。

主なプロセスは以下に分かれています:

クロール、並べ替え、および保存

1 ウェブサイトにリクエストを送信し、ウェブページのコードを取得するために使用される

リクエストを含む、いくつかのパッケージが使用されます。

BeautifulSoup4は、取得したWebページのコードを処理し、有効な情報を抽出するために使用されます

pandasは、情報を保存するために使用されます

このうち、to_excel('docname.xlsx')の場合、別のパッケージopenpyxl

import requests
from bs4 import BeautifulSoup
import re
import json
import pandas
import excel
import sqlite3
# import openpyxl

2が必要になる場合がありますSina をクロールするには Web サイトの各ニュースの担当編集者を例に挙げます。現在のニュースの Web サイトのアドレスを取得した後、その担当編集者を取得する方法を逆算して決定します。 ?

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遍历

ii) メインページを元に各ニュースページのURLを取得する方法

json内に特定の行のファイルがあるので、comments=requests.get('url')を渡して

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

jd=['result']['count']['total'] ==>これは辞書内の辞書です。 Webページから要素を確認できる プレビューで見る

==> 辞書化可能

このうち、辞書に戻したい場合は、左側と右側の余分なものを削除する必要がありますストリップ()

左側と右側を別々に削除する必要がある場合は、lstrip() と rstrip()、つまり左側と右側を使用します

==>for ent in ~:

ent['url' ]

***)Soup.select()で取得した必要な要素が同じクラスにある場合は、contents[0]を使用して区別できます

***)timeとstrの変換

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

** *) list[] の各要素を接続します

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

***) 複数のページがある URL の場合、ページを見つける必要があります 該当する部分を {}、

に変更し、format() に置き換えます

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

3. pandas を使用してデータを保存します。これは、DataFrame() 関数関数

df=pandas.DataFrame(list)
print(df.head(20))  #显示前20条信息
df.to_excel('news.xlsx') #转存为excel格式,名字为news.xlsx

であり、リストの形式は

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

です。

以上が単純な Python クローラー インスタンスを記録するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。