各妹は絵の内側に妹をダウン保存する方法を推定紳士マップを、見たことがありますか?
美しい写真クローラを撮影姉妹車のマップのストリートを行う方法を説明するブロガー。
ビット、紳士は、できるだけ早く列車にこの先の幼稚園を取得してください。O(//// ////▽)qは、あなたが知っています!!!
前提の準備
あなたは今、バス上にある紳士!さて、メインボードアは、下車する保育所以外の誰をシャットを溶接していません。ヾ(•ω• `)O
:このチュートリアルを食べても安全であるためには、次の必要
のPython(バージョン:3.7)
要求(バージョン:2.21.0)
lxmlの(バージョン:4.3.3)
FirefoxやGoogleのブラウザの
win7のかwin10コンピュータを
要件分析
図ストリートモジュールを打つすべての福祉姉妹の美しさのマップをクロールし、で[画像]をダウンロードし、ローカルフォルダに保存
姉妹の美しマップストリートビートモジュールURL [ https://www.mzitu.com/jiepai/comment-page-1 /#コメント]
Web分析
まず、開い姉妹の美しマップストリートURLを倒す ]、その後、要素を表示する画像を右クリックして[表示画像リンク位置
あなたの紳士は、ページのコードを参照して、姉(lll¬ω¬を)見ていない!
ページで見つけることができますクラスに存在するには怠惰なラベル属性データ元のプロパティ、XPathの良い試合の写真を書くのは簡単ですので。今、すべてのページが出て抽出できる画像。私たちは次のページの後、すべてのページをクロールし、すべての機能だけでなく、フリップを達成するために、分析のURLが変更する必要があるため。
最初のページのURL
[ https://www.mzitu.com/jiepai/comment-page-1/#comments]
の2ページのURL
[ https://www.mzitu.com/jiepai/comment-page-2 /#コメント]
ページNで見ることができるようにURL PAGE-数は、後にN.なっています
コードの戦闘
1.前提パラメーター
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年5月19日
import requests
from lxml import etree
"""
设置浏览器头部,
User-Agent用于表示浏览器的参数信息
Referer用于设置使用那个网页跳转过来的
url用于设置网址模板,可以通过.format参数补充网址
"""
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0",
"Referer":"https://www.mzitu.com/jiepai/comment-page-1/",}
url = 'https://www.mzitu.com/jiepai/comment-page-{}/#comments'
name = 0
# -*- coding:utf-8 -*-
デフォルトの符号化コードは、UTF-8の使用がされている役割に配置されている
import requests
ことにより、可能な場合、リクエストという名前のモジュールに導入pip install requests
モジュールのインストール
from lxml import etree
、etree形式にWebページのetree機能モジュールLXML導入を画像マッチングリンク
のヘッダブラウザシミュレートするために使用ヘッダパラメータ、保存
、便利なポストビルドページのURLを保存するためのURLのURLテンプレートを
、現在の最初のいくつかの写真を保存するために使用される名前を
2.ダウンロードページ
def get_html(url):
"""获取网页代码并以返回值的形式弹出"""
html = requests.get(url,headers=header).text
return html
定义一个函数get_html用于下载网页代码,调用时需要传递一个网址作为参数
使用requests模块的get函数,将网址作为传递进去,并将header作为浏览器头部传入关键字形参headers,将内容以text文本的形式保存到变量html中,并使用return将网页内容弹出。
3.下载图片
def get_img(url):
"""下载图片并保存到指定文件夹下"""
global name
name +=1
img_name = 'picture\\{}.jpg'.format(name)
img = requests.get(url,headers=header).content
with open (img_name,'wb') as save_img:
save_img.write(img)
定义一个函数get_img用于下载图片,调用时需要传递一个网址作为参数
global name ,用于该函数修改全局变量name 的值
name += 1 设置当前name的值为原先name的值加一,等价于 name += 1
设置一个变量img_name用于设置图片名称。使用requests模块的get函数,将网址作为传递进去,并将header作为浏览器头部传入关键字形参headers,将内容以content二进制数据的形式保存到变量img中,并且保存到picture文件夹中。现在也能获取网页代码,也能下载图片,我们还需要获取所有图片的网址
4.获取图片链接
def get_url(html):
"""获取图片链接并以返回值的形式弹出"""
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
使用etree.HTML方法将网页代码转换为etree格式的数据
使用xpath匹配处所有的图片链接,便以reture的方式弹出
5.主函数
def main():
'''使用for循环爬取所有网页'''
for n in range(1,24):
print ("正在爬取第{}页".format(n))
html = get_html(url.format(n))
img_list = get_url(html)
for img in img_list:
get_url(img)
main()
ループ変数nに設定された値を使用して、デフォルトのステップが正の数1、24の最終値から成長します。
使用するprint ("正在爬取第{}页".format(n))
印刷は最初の数ページをクロールしています。
nの値は、url変数満たさURLに渡され、URLは、HTML変数にダウンロードURLを保存するために、get_html関数に渡されます。
図のリンクページのすべての利点を抽出するためのGET_URL伝達関数にhtmlページのコードで保存された変数。
get_imgに画像をダウンロードするための特定のリンクの伝達関数を用いて各画像を抽出するループに使用
メイン関数を呼び出す)(メイン最後に使用
効果を確認してください
今、私たちは、コードを実行し、ために戻って何が起こるか見て
1-23のクロールを示し、絵を見てでクロール、あなたの紳士は(Oの上に保持してください▽//// ////)●
完全なコード
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年5月19日
import requests
from lxml import etree
"""
设置浏览器头部,
User-Agent用于表示浏览器的参数信息
Referer用于设置使用那个网页跳转过来的
url用于设置网址模板,可以通过.format参数补充网址
"""
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0",
"Referer":"https://www.mzitu.com/jiepai/comment-page-1/",}
url = 'https://www.mzitu.com/jiepai/comment-page-{}/#comments'
name = 0
def get_html(url):
"""获取网页代码并以返回值的形式弹出"""
html = requests.get(url,headers=header).text
return html
def get_img(url):
"""下载图片并保存到指定文件夹下"""
global name
name +=1
img_name = 'picture\\{}.jpg'.format(name)
img = requests.get(url,headers=header).content
with open (img_name,'wb') as save_img:
save_img.write(img)
def get_url(html):
"""获取图片链接并以返回值的形式弹出"""
etree_html = etree.HTML(html)
img_url = etree_html.xpath('//img[@class="lazy"]/@data-original')
return img_url
def main():
'''使用for循环爬取所有网页'''
for n in range(1,24):
print ("正在爬取第{}页".format(n))
html = get_html(url.format(n))
img_list = get_url(html)
for img in img_list:
get_img(img)
main()