初心者のpython爬虫類、学習プロセスについての記録は、要求は、OSの抽出の写真をXPathと地元の03 MMを保存します

我々はすべて知っているように、絵が考えられている技術をクロール爬虫類を学習していない、のpythonを学ぶには、道路のマスターにつながるステップであり、どのようなMM図ああ、ああすることは戦いのマップは、我々は表示されませんダウンクロールしても、テクニックを練習することが何でありますかA。ああ、DUIは表示されません。

ここに画像を挿入説明
さて、クローサー家に、初めてクロール絵はちょうどダウンクロールの家を想像し、イメージの詳細ページ、または不快をクロールしませんでした。残念にプラスの快適な、置換を参照してください。はい、私は見ていなかったので、私は登ることかわかりません。
ここに画像を挿入説明
:最初のクロールは、を参照することができます
最初のクロール

ホーム登る削除過ぎるので、コードを改善し、ああ後悔される詳細ページを見ることはありませんが、住所の詳細ページ、エキスの写真二度目のクロールを出てきた詳細ページをコピーします。第二の基準は、クロールされてもよい。
第二のクロール

しかし、それぞれの時間は、詳細ページを入力する必要がありましたアドレスの詳細ページをコピーし、私は怠け者だとして、そこにあるものの、さらに失いたくない、Pycharmを締結しています。
ここに画像を挿入説明
それともゆっくりとそれを失います!
それはあまりにも多くのですが、これはアップ得るためにどのような時間でした。あなたは道ああを考える必要があります。
ここに画像を挿入説明
だから、法律を見つけ、検索ボックスに対処するために、コードの再抽出を改善し、2つのパラメータのみが再度変更、ハンドルにこれは簡単、URLの建設が終了してしまうことが判明し、
ここに画像を挿入説明
ここに画像を挿入説明
変更のみこれら2つのパラメータ、最初のページに移動ページ= 1のとき、これは何の事ではありません。
ここに画像を挿入説明
建設が完了した
リクエストにある次のステップを、解析されました。リクエストの分解能は、私はすべてがうまくいけ持っていたが、第1、第2のクロールを参照することができたときに詳細ページアドレスと物語のページの最初のページの裏と同じでないことを発見しました。
ここに画像を挿入説明
最初のページのアドレス:
ここに画像を挿入説明
2ページアドレス:
ここに画像を挿入説明
のみ組み立て、解体しているURLの後ろに、唯一のシングルで処理し、コードがある場合は、次のようにもパラメータ。
ここに画像を挿入説明
正常にこのサイト上のすべての画像のアドレスを持って人を検索します。
しかし、問題はまだ、サイトを入力する必要がダウンロードしたい人の名前を見つけ、その後、URL構造の検索に名前を入力するか、面倒ああすることができ、があります。だから、あなたがサイトではありませんのでことを、直接pycharm行われ、入力入力を使用してと思う
ここに画像を挿入説明
あなたが行われています!
最初に試します。
ここに画像を挿入説明
新しいファイルや店舗の成功
ここに画像を挿入説明
の最後:
Benpianはちょうどシングルスレッド、クロールクロールは、ページの比較的多数に適していない、または長時間実行されます。
クロールの数を見てみましょう
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
、1が出て掲載、多くはないがあります。また、聖体の世話をします。
完全なコードを提供します。

'''
requests库请求目标网址
xpath提取网页的图片地址
os模块建立文件夹存储图片
面向函数编程
'''
# 导入第三方库
import requests
from lxml import etree
import time
import os
# useragent库
from fake_useragent import UserAgent
# 定义随机的UserAgent
ua = UserAgent()
headers = {'User-Agent':ua.random}

# 定义得到搜索页的html的函数
def get_html(url):
    time.sleep(1)
    # 如果用.text()则出现乱码的情况,所以采用utf-8方式解码
    html = requests.get(url,headers = headers).content.decode('utf-8')
    return html
# 定义解析中间页函数
def mid_paser_html(html):
    data01 = []
    e = etree.HTML(html)
    # 提取详情页的url地址
    details_list = e.xpath('//div[@class="list_box_info"]/h5/a/@href')
    for details_page in details_list:
        data01.append(details_page)
    return data01
# 定义解析最终图片的函数
def f_paser_html(data01):
    details = {}
    detail = []
    for images in data01:
        html01 = requests.get(url=images,headers = headers).content.decode('utf-8')
        e = etree.HTML(html01)
        # 提取每一层图片的总页数
        nums = e.xpath('//div[@class="imageset"]/span[@class="imageset-sum"]/text()')
        for page in range(1, int(nums[0].split(' ')[1])):
            # 由于每层图片的第一页地址与以后的地址不一样,需要单独处理。
            if page == 1:
                # 每层第一页的地址就为中间页的地址
                html = requests.get(url=images, headers=headers).content.decode('utf-8')
                e = etree.HTML(html)
                # xpath提取图片地址
                image = e.xpath('//div[@class="img_box"]/a/img/@src')
            else:
                # 由于是请求每一层的全部图片,每一层的url各不相同,需要构造url,以首页url为基准,先以'_'号将url分割为两部分,中间加上'_'
                # 第二部分取以'_'分割的第二部分并再以'.'分割,加上'_' 加上page 加上.html
                urls = str(images).split('_')[0] + '_' + str(images).split('_')[1].split('.')[0] + '_' + str(page) + '.html'
                # 请求构造的url
                html = requests.get(url=urls, headers=headers).content.decode('utf-8')
                e = etree.HTML(html)
                # 提取图片的地址
                image = e.xpath('//div[@class="img_box"]/a/img/@src')
            # 加入字典
            details['image'] = image
            # 遍历循环字典,添加到列表中
            for det in details['image']:
                detail.append(det)
    return detail

def save_images(detail):
    # 创建文件夹
    if not os.path.exists(temp):
        os.mkdir(temp)
    for image in detail:
        # 请求每一张图片的url
        r = requests.get(url=image, headers=headers)
        # 定义每一张图片的名字
        file_name = image.split('/')[-1]
        print('正在下载:'+ image )
        # 写入图片文件
        with open(temp + '/' + file_name, 'wb') as f:
            f.write(r.content)

def main():
    # 翻页
    for page in range(1,2):
        url = 'https://www.yeitu.com/index.php?m=search&c=index&a=init&typeid=&siteid=1&q={}&page=%d'.format(temp) %page
        html = get_html(url)
        data01 = mid_paser_html(html)
        detail = f_paser_html(data01)
        save_images(detail)


if __name__ == '__main__':
    print('请输需要下载图片人物的名称:')
    temp = input()
    main()

公開された18元の記事 ウォン称賛14 ビュー1276

おすすめ

転載: blog.csdn.net/qq_46292926/article/details/104630551