オブジェクト指向フィルムおよびXPathクロール猫トップ100
インポート時間 インポートJSONの インポート要求 から lxmlのをインポートetreeの クラスMaoYanTop100(オブジェクト): デフ __init__ (自己): self.url = ' https://maoyan.com/board/4 ' self.headers = { " ユーザエージェント":" はMozilla / 5.0(Windows NTの10.0; Win64の、のx64)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 74.0.3729.108サファリ/ 537.36 " } DEF get_data(自己、URL、PARAM): 応答= requests.get(URL、のparams = PARAM、ヘッダ= self.headers、検証= False)が 印刷(response.request.url) リターンresponse.textの デフparse_content(自己、テキスト): DOM = etree.HTML(テキスト) のリターンDOM DEF 構文解析(自己、DOM) ノード = dom.xpath(' // DD ' ) のためのノードでノード: 収率{ ' タイトル':node.xpath(' .//p/a/@title ' )[0 ]、 "俳優':node.xpath(' .// P [クラス@ = "スター"] /テキスト()' )[0] .strip()、 ' 時間':node.xpath(' .//p[@class = "releasetime"] /テキスト()' )[0] } DEF 保存(自己、F、項目): f.write(json.dumps(項目、インデント = 2、ensure_ascii =偽)+ ' 、\ n ' ) デフ(自己)を実行します。 ページ = INT(入力(' 请页码输入:' )) (オープンと' maoyan.json '、"中")f_objとして: のために私に:範囲(ページ) PARAM = { ' 開始':I * 10 } テキスト = self.get_data(self.url、PARAM) time.sleep( 1 ) DOM = self.parse_content(テキスト) my_generator = self.parse(DOM) 一方TRUE: 試す: #item_list = [] アイテム=次の(my_generator) #1 item_list.append(項目) self.save(f_obj、項目) を除く: BREAK プリント(F ' {I + 1}完了ページデータが保存の' ) IF __name__ == ' __main__ ' : maoyan = MaoYanTop100 () maoyan.run()