我々はすべて知っているように、絵が考えられている技術をクロール爬虫類を学習していない、の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()