BaiduのSogouの写真に永続ストレージをクロール爬虫類

1.画像をダウンロード

 

#Baiduの画像:HTTP://image.baidu.com/
#Sogouのイメージます。https://pic.sogou.com/

 

 

ピクチャ#クロール:
1)の画像をダウンロードしたURLを検索:要素とネットワークパケットキャプチャ
。2)ブラウザが検証のために、URLにアクセスするための
URLを取得するコードを書くための3)。
4)リクエストURLアドレスをバイナリストリーム取得する。
5)。ファイルを書き込むバイナリストリーム

 

 

#百度图片:
インポート時の
インポート要求
lxmlのインポートetreeから
セレンインポートwebdriverをから

#ブラウザオブジェクトの例
ブラウザ= webdriver.Chrome( './ chromedriver.exe' )

#Webページの要素が検索結果を取得するアクセスと操作
browser.get( 'http://image.baidu.com/')
input_tag = browser.find_element_by_id( 'キロワット')
input_tag.send_keys( '橋Biluo')
search_button = browser.find_element_by_class_name ( 's_search')
)(search_button.click

マウスによって達成#JSのは、より多くのソース用のページを下にスクロールし
のjs = 'window.scrollToは(0、document.body.scrollHeight')
:(3)でレンジ・タイムズのための
browser.execute_script(JS)
time.sleep(3)
HTML = browser.page_source

#解析数据获取图片连接:
木= etree.HTML(HTML)
url_list = tree.xpath( '//のdiv [@ ID = "imgid"] / DIV / UL /リチウム/ @データ-OBJURL')
url_listでimg_urlため:
ヘッダー= {
'のUser-Agent': 'のMozilla / 5.0(Windows NTの10.0; Win64の、のx64)のAppleWebKit / 537.36(ヤモリ様KHTML)クローム/ 76.0.3809.132サファリ/ 537.36'
}
コンテンツ= requests.get(URL = img_url、ヘッダー=ヘッダ).content
'トークン'ではないimg_urlであれば:
とオープン( './ baidupics /%S '%img_url.split('/') - 1]、Fのような) 'WB':
F。書き込み(コンテンツ)

 

 

 

#Sogouのイメージ:
インポート要求
のインポート日時を

URL = 'http://pic.sogou.com/pics?'
paramsは= {
'クエリ': '韩美娟'
}
RES = requests.get(URL = URL、のparams =用のparams)の.text
url_list = re.findall(R」 "(HTTPS:// iは+ piccdn \ .sogoucdn D \ ?.COM /.*) "] 'RES)
img_urlためurl_listにおいて:
ヘッダー= {
'のUser-Agent':'のMozilla / 5.0(Windows NTの10.0; Win64の、のx64)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/76.0.3809.132サファリ/ 537.36'
}
プリント(img_url)
含有量= requests.get(URL = img_url、ヘッダー=ヘッダ).content
名= img_url.split( '/') - 1] + '.JPG'
オープンとFとして(」./sougoupics/%s.jpg'%name、 'WB'):
f.write(コンテンツ)

 

動的なレンダリングを2.JS

1).seleniumのクロール:セレンテストフレーム、完全に人間のオペレータのブラウザモード、*** *** page_source
2)基本的な構文:.
webdriverをセレンのインポートから
インスタンス化#ブラウザオブジェクト:
ブラウザ= webdriver.Chrome(「ブラウジング./chromedriver.exe ': '現在のパス#で)'パスをドライブ
:アクセス応答#のURLアドレス
browser.get(URL)
:#は、ページ要素を取得
find_element_by_id
find_element_by_nameを():名前がname属性値のタグです
find_element_by_class_name:クラス属性は、値
要素の標的発現のXPath:find_element_by_xpath
find_element_by_css_selectorを:CSSセレクタ
#の例:入力ボックスの入力されたIDは、KW取得
input_tag = browser.find_element_by_id( 'KW')
:#タイピング
input_tag.clear()
input_tagを.send_keys( '橋Biluo殿下')
のクリックボタンボタン:
Button.Click()
#JSコードを実行します。
= JS 'window.scrollToは(0、document.body.scrollHeight)'
I範囲内のための(3):
browser.execute_script(JS)

#HTMLのソースコードを取得する:何の括弧を忘れないでくださいません*****
HTML#= browser.page_source STR型

#解析データ:
1)データ.xpathを抽出する:
2)定期的な抽出:REモジュール+用いて正規表現を書き込む
3).Beautifulsoup:CSSセレクタ- >(ノード選択、メソッドセレクタ、 CSSセレクタ)

#メディアタイプ:ビデオ、画像、圧縮、ソフトウェアインストールパッケージ
1)ダウンロードリンク。
2).requests要求:response.content - >バイナリストリーム
scrapyフレーム:response.body - >バイナリストリーム
3)ファイルを書き込む:
F ASオープン( './ jdkfj /名'、 'WB')を持つ:
f.write(res.content | response.body)

3.データ解析

1.Xpath
#符号化処理
lxmlのインポートetreeのから
#インスタンス化オブジェクトetree
ツリー= etree.HTML(res.text)
データを抽出する#コールXPath式
li_list = tree.xpath( 'XPath式')#1 XPathはデータを抽出しリスト
#ネスト
li_list中のLiのために:
li.xpath( 'XPath式')
#./
#.//

#基本文法:
./:現在のルートノードの下に一致
../:どこにでも現ノードと一致するから
測位ノード名:ノード名
ノード名[@たattributeName =「値」 ]: 標的性
多値属性マッチングユニット:含まれています- > DIV [含まれています( @class、 "項目")]
複数の属性の一致:と- >のdiv [クラス@ = "項目"と名@ = "divtag"]
@attributename:抽出属性が値
(テキストを):テキスト情報を抽出

#順次選択する:
1)インデックス場所:最初からインデックス、res.xpath( '// DIV / UL /李[1] /テキスト()'): 第1のラベルのli位置決め
要求を要求に応じてオブジェクトモジュール:
res.text - >テキスト
res.json() - > Pythonの基本データ型- >辞書
res.content - >バイナリストリーム
2).last()関数の位置:最後のもの、最後から二番目:最後の() - 1
res.xpath( '// DIV / UL /リチウム[最後の()]'):最後の位置決め
res.xpathを(「// DIV / UL /リー[最後の() - 1]「):位置決め最後から二番目の
3).position()関数:位置
RES。XPathの( '// DIV / UL /リチウム[位置()<4]')

2.BS4基本的な文法:
#エンコード処理:
BeautifulSoup BS4インポートから
#インスタンス化オブジェクトスープ
スープ= BeautifulSoup(res.text、 'lxmlの')
位置決めノード
soup.select( 'CSSセレクタ')
はCSSの構文を選択します。
ID:#の
クラス:.
soup.select( 'div> UL>李')#単一ステージセレクタ
soup.select( 'のdivリー')#マルチレベルセレクタ
#取得したノードテキストまたは属性:
tag.string:テキストを直接取得-テキストに加えて、タグバイトが、また他のラベルが含まれている場合>、テキストダイレクトに失敗
tag.get_textを():テキストを取得
タグ[「attributeNameの」]:GET属性を(属性が2トライを(持っていますa)のデータ型が値以上に戻ったとき)を含む
3.再&モジュールの正規
> 'dfkjd(KDFのdfdf *)dfdf。?' -パケット非欲張り&マッチを:()
<のhref =「https://www.baidu .COM / kdjfkdjf.jpg「>これがラベルである</a>に- >
'<aのhref="(https://www.baidu.com/.*?\.jpg)">'
量指定子:
+:マッチ1回以上
*:0回が複数の一致を得ます
{M}:マッチm回
{M、N}:n回Mにマッチ
{M}少なくともM
{N}:n回まで
再モジュール:
re.findall( '正規表現'、res.text) - >リスト一覧

4.永続ストア

1.TXT
#############写入TXT文件###############
かのタイトルやジョークやコメント:
オープン( 'qbtxt.txtと# 」、 ''、エンコード= 'UTF-8')txtfileとして:
#1 txtfile.writeは( '&'(タイトル[0]、ジョーク[0]、コメント[0]]参加))
#txtfile.write ( '\ n')で
#のtxtfile.write( '************************************** ****** \ n ')


2.json
#############写入JSON文件################
#DIC = { 'タイトル':タイトル[0]、 'ジョーク':ジョーク[0]、 'コメント':コメント[0]}
オープンと#( 'jsnfile.json'、 ''、エンコード= 'UTF-8')としてjsonfile:
#1 jsonfile.write(json.dumps(DIC、インデント= 4、ensure_ascii)= False)が
#のjsonfile.write( ' '+' \ n'は)

3.csv
#############写入CSV文件##################
オープン( 'csvfile.csv'は、 '' 、エンコーディング=たcsvfileとして'UTF-8'):
ライター= csv.writer(csvfile内、デリミタ=」「)
writer.writerow(タイトル[0]、ジョーク[0]、コメント[0])
#### ######### scrapy框架##################
FEED_URI = 'ファイル:///home/eli/Desktop/qtw.csv'
FEED_FORMAT = ' CSV」
4.mongodb

5.mysql

 

おすすめ

転載: www.cnblogs.com/huanghaobing/p/11755238.html