最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2021-09-30 18:10 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)
  你還去網(wǎng)站搜什么圖?
  你還在尋找百度圖片等圖片素材網(wǎng)站嗎?
  今天給大家分享一個(gè)全新的圖片素材獲取方式。你想要的這里都有!
  是新浪微博!新一代的超級流量門(mén)戶(hù),甚至現在很多人都用它作為替代百度搜索的工具。以前是找杜娘找東西,現在是搜微博。
  比如某個(gè)宅男想看清純少女的照片,越多越好。他會(huì )這樣搜索:
  
  然后,他會(huì )逐頁(yè)閱讀和欣賞這些吸引眼球的圖片,并在遇到喜歡的人時(shí)將大圖片下載到本地保存。
  
  作為一個(gè)python程序員,我懶得像這樣一頁(yè)一頁(yè)地翻頁(yè)。喜歡全部下載下來(lái)慢慢欣賞,爆了硬盤(pán)!類(lèi)似于以下內容:
  
  這種簡(jiǎn)單的問(wèn)題讓我們?yōu)閜ythoner寫(xiě)爬蟲(chóng)那么容易,何樂(lè )而不為呢?讓我直接與你分享。
  分析目標網(wǎng)站
  微博的搜索結果是分頁(yè)的,所以我們的思路肯定是分頁(yè)處理,逐頁(yè)解析。
  我們先來(lái)看看搜索結果:
  
  我們點(diǎn)擊“搜索”按鈕后,很容易找到搜索請求。此處網(wǎng)頁(yè)顯示了第一頁(yè)的結果。
  然后我們點(diǎn)擊“Next”,我們可以發(fā)現請求變成了如下:
  
  細心的話(huà),可能一眼就發(fā)現在請求后多了一個(gè)page參數,指的是頁(yè)碼。這很容易。我們只需要改變頁(yè)碼就可以請求對應頁(yè)面的內容。
  由于此請求返回一個(gè) HTML 頁(yè)面,因此我們需要在此頁(yè)面上努力找到指向圖像的鏈接。我們隨便用頁(yè)面元素檢查來(lái)定位一張圖片,會(huì )看到如下效果:
  
  我們可以看到這個(gè)div里面的action-data是一個(gè)集合,下面li里面img的action-data是單張圖片的數據。
  接下來(lái),我們點(diǎn)擊“查看大圖”按鈕,瀏覽器會(huì )跳轉到一個(gè)新頁(yè)面,頁(yè)面內容為大圖。
  
  從請求的 URL 往下看,我發(fā)現了這個(gè):
  
  我把這個(gè)網(wǎng)址復制到瀏覽器請求中,發(fā)現這正是我們需要的大圖。我們也可以很容易的看到這個(gè)URL的特點(diǎn),就是最后我們在上面的action-data中添加了pic_id。
  這樣,我們的思路就很清晰了,下面是獲取一頁(yè)圖片的思路:
  獲取頁(yè)面內容;在頁(yè)面內容中找到圖片ID;拼接查看大圖的URL,請求獲取圖片;將圖像寫(xiě)入本地。代碼代碼
  思路很清晰,需要代碼code來(lái)驗證。由于代碼比較簡(jiǎn)單,我就一次性給大家展示一下。
  import requests
import re
import os
import time
cookie = {
'Cookie': 'your cookie'
}
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4144.2 Safari/537.36'
}
get_order = input('是否啟動(dòng)程序? yes or no: ')
number = 1
store_path = 'your path'
while True:
if get_order != 'no':
print('抓取中......') # 下面的鏈接填寫(xiě)微博搜索的鏈接
url = f'https://s.weibo.com/weibo%3Fq% ... ge%3D{number}'
response = requests.get(url, cookies=cookie)
result = response.text
print(result)
detail = re.findall('data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">', result)
for part in detail:
uid = part[0]
mid = part[1]
pids = part[2]
for picid in pids.split(','):
url_x = f'https://wx1.sinaimg.cn/large/%s.jpg'%picid # 這里就是大圖鏈接了
response_photo = requests.get(url_x, headers=header)
file_name = url_x[-10:]
if not os.path.exists(store_path+uid):
os.mkdir(store_path+uid)
with open(store_path+uid + '/' + file_name, 'ab') as f: # 保存文件
f.write(response_photo.content)
time.sleep(0.5)
print('獲取完畢')
get_order = input('是否繼續獲取下一頁(yè)? Y:yes N:no: ')
if get_order != 'no':
number += 1
else:
print('程序結束')
break
else:
print('程序結束')
break
  我這里采用了逐頁(yè)斷點(diǎn)的形式,方便調試。如果你想一次得到所有頁(yè)面的圖片,你可以把這些輸入判斷去掉,一次性全部運行。代碼中的cookie和圖片存儲路徑需要替換為你本地的。
  運行后的結果如下:
  
  我按照微博把圖片分到文件夾里。如果覺(jué)得不直觀(guān),想把所有圖片都放在一個(gè)目錄下,可以去掉這一層文件夾。
  總結
  本文介紹如何通過(guò)一個(gè)簡(jiǎn)單的爬蟲(chóng)獲取微博圖片搜索結果。代碼量相當少,但是對一些人來(lái)說(shuō)是很有幫助的,省時(shí)省力。還可以展開(kāi),除了圖片,還可以獲取其他搜索內容,比如微博文字、視頻、購物鏈接等。 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)
  你還去網(wǎng)站搜什么圖?
  你還在尋找百度圖片等圖片素材網(wǎng)站嗎?
  今天給大家分享一個(gè)全新的圖片素材獲取方式。你想要的這里都有!
  是新浪微博!新一代的超級流量門(mén)戶(hù),甚至現在很多人都用它作為替代百度搜索的工具。以前是找杜娘找東西,現在是搜微博。
  比如某個(gè)宅男想看清純少女的照片,越多越好。他會(huì )這樣搜索:
  
  然后,他會(huì )逐頁(yè)閱讀和欣賞這些吸引眼球的圖片,并在遇到喜歡的人時(shí)將大圖片下載到本地保存。
  
  作為一個(gè)python程序員,我懶得像這樣一頁(yè)一頁(yè)地翻頁(yè)。喜歡全部下載下來(lái)慢慢欣賞,爆了硬盤(pán)!類(lèi)似于以下內容:
  
  這種簡(jiǎn)單的問(wèn)題讓我們?yōu)閜ythoner寫(xiě)爬蟲(chóng)那么容易,何樂(lè )而不為呢?讓我直接與你分享。
  分析目標網(wǎng)站
  微博的搜索結果是分頁(yè)的,所以我們的思路肯定是分頁(yè)處理,逐頁(yè)解析。
  我們先來(lái)看看搜索結果:
  
  我們點(diǎn)擊“搜索”按鈕后,很容易找到搜索請求。此處網(wǎng)頁(yè)顯示了第一頁(yè)的結果。
  然后我們點(diǎn)擊“Next”,我們可以發(fā)現請求變成了如下:
  
  細心的話(huà),可能一眼就發(fā)現在請求后多了一個(gè)page參數,指的是頁(yè)碼。這很容易。我們只需要改變頁(yè)碼就可以請求對應頁(yè)面的內容。
  由于此請求返回一個(gè) HTML 頁(yè)面,因此我們需要在此頁(yè)面上努力找到指向圖像的鏈接。我們隨便用頁(yè)面元素檢查來(lái)定位一張圖片,會(huì )看到如下效果:
  
  我們可以看到這個(gè)div里面的action-data是一個(gè)集合,下面li里面img的action-data是單張圖片的數據。
  接下來(lái),我們點(diǎn)擊“查看大圖”按鈕,瀏覽器會(huì )跳轉到一個(gè)新頁(yè)面,頁(yè)面內容為大圖。
  
  從請求的 URL 往下看,我發(fā)現了這個(gè):
  
  我把這個(gè)網(wǎng)址復制到瀏覽器請求中,發(fā)現這正是我們需要的大圖。我們也可以很容易的看到這個(gè)URL的特點(diǎn),就是最后我們在上面的action-data中添加了pic_id。
  這樣,我們的思路就很清晰了,下面是獲取一頁(yè)圖片的思路:
  獲取頁(yè)面內容;在頁(yè)面內容中找到圖片ID;拼接查看大圖的URL,請求獲取圖片;將圖像寫(xiě)入本地。代碼代碼
  思路很清晰,需要代碼code來(lái)驗證。由于代碼比較簡(jiǎn)單,我就一次性給大家展示一下。
  import requests
import re
import os
import time
cookie = {
'Cookie': 'your cookie'
}
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4144.2 Safari/537.36'
}
get_order = input('是否啟動(dòng)程序? yes or no: ')
number = 1
store_path = 'your path'
while True:
if get_order != 'no':
print('抓取中......') # 下面的鏈接填寫(xiě)微博搜索的鏈接
url = f'https://s.weibo.com/weibo%3Fq% ... ge%3D{number}'
response = requests.get(url, cookies=cookie)
result = response.text
print(result)
detail = re.findall('data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">', result)
for part in detail:
uid = part[0]
mid = part[1]
pids = part[2]
for picid in pids.split(','):
url_x = f'https://wx1.sinaimg.cn/large/%s.jpg'%picid # 這里就是大圖鏈接了
response_photo = requests.get(url_x, headers=header)
file_name = url_x[-10:]
if not os.path.exists(store_path+uid):
os.mkdir(store_path+uid)
with open(store_path+uid + '/' + file_name, 'ab') as f: # 保存文件
f.write(response_photo.content)
time.sleep(0.5)
print('獲取完畢')
get_order = input('是否繼續獲取下一頁(yè)? Y:yes N:no: ')
if get_order != 'no':
number += 1
else:
print('程序結束')
break
else:
print('程序結束')
break
  我這里采用了逐頁(yè)斷點(diǎn)的形式,方便調試。如果你想一次得到所有頁(yè)面的圖片,你可以把這些輸入判斷去掉,一次性全部運行。代碼中的cookie和圖片存儲路徑需要替換為你本地的。
  運行后的結果如下:
  
  我按照微博把圖片分到文件夾里。如果覺(jué)得不直觀(guān),想把所有圖片都放在一個(gè)目錄下,可以去掉這一層文件夾。
  總結
  本文介紹如何通過(guò)一個(gè)簡(jiǎn)單的爬蟲(chóng)獲取微博圖片搜索結果。代碼量相當少,但是對一些人來(lái)說(shuō)是很有幫助的,省時(shí)省力。還可以展開(kāi),除了圖片,還可以獲取其他搜索內容,比如微博文字、視頻、購物鏈接等。

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2021-09-30 17:20 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())
  本文文章主要介紹Python3簡(jiǎn)單爬蟲(chóng)抓取網(wǎng)頁(yè)圖片代碼示例。文章通過(guò)示例代碼介紹了非常詳細的例子。對大家的學(xué)習或工作有一定的參考學(xué)習價(jià)值。有需要的朋友可以參考。
  網(wǎng)上有很多用python2編寫(xiě)的爬蟲(chóng)抓取網(wǎng)頁(yè)圖片的例子,但是不適合新手(新手使用python3環(huán)境,不兼容python2),
  于是寫(xiě)了一個(gè)簡(jiǎn)單的例子,用Python3語(yǔ)法抓取網(wǎng)頁(yè)圖片。希望能幫到你,也希望你能批評指正。
  
import urllib.request
import re
import os
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = imgre.findall(html)#表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
x = 0
path = 'D:\\test'
# 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建
if not os.path.isdir(path):
os.makedirs(path)
paths = path+'\\' #保存在test路徑下
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串
x = x + 1
return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866")#獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
print (getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
  以上就是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())
  本文文章主要介紹Python3簡(jiǎn)單爬蟲(chóng)抓取網(wǎng)頁(yè)圖片代碼示例。文章通過(guò)示例代碼介紹了非常詳細的例子。對大家的學(xué)習或工作有一定的參考學(xué)習價(jià)值。有需要的朋友可以參考。
  網(wǎng)上有很多用python2編寫(xiě)的爬蟲(chóng)抓取網(wǎng)頁(yè)圖片的例子,但是不適合新手(新手使用python3環(huán)境,不兼容python2),
  于是寫(xiě)了一個(gè)簡(jiǎn)單的例子,用Python3語(yǔ)法抓取網(wǎng)頁(yè)圖片。希望能幫到你,也希望你能批評指正。
  
import urllib.request
import re
import os
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = imgre.findall(html)#表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
x = 0
path = 'D:\\test'
# 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建
if not os.path.isdir(path):
os.makedirs(path)
paths = path+'\\' #保存在test路徑下
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串
x = x + 1
return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866";)#獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
print (getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
  以上就是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng) )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 317 次瀏覽 ? 2021-09-30 02:11 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng)
)
  這篇文章是針對初學(xué)者的,我會(huì )用最簡(jiǎn)單的案例來(lái)告訴你如何開(kāi)始使用python爬蟲(chóng)!
  開(kāi)始使用Python爬蟲(chóng),首先需要解決四個(gè)問(wèn)題
  一、你應該知道什么是爬蟲(chóng)吧?
  網(wǎng)絡(luò )爬蟲(chóng)其實(shí)叫做Web Data采集,比較容易理解。
  就是通過(guò)編程向Web服務(wù)器請求數據(HTML形式),然后解析HTML,提取出你想要的數據。
  總結為四個(gè)主要步驟:
  根據url獲取HTML數據解析HTML,獲取目標信息存儲數據重復第一步
  這將涉及很多內容,例如數據庫、Web 服務(wù)器、HTTP 協(xié)議、HTML、數據科學(xué)、網(wǎng)絡(luò )安全和圖像處理。但是對于初學(xué)者來(lái)說(shuō),沒(méi)必要掌握那么多。
  二、python學(xué)多少
  如果你不懂python,你需要學(xué)習python,一種非常簡(jiǎn)單的語(yǔ)言(相對于其他語(yǔ)言)。
  編程語(yǔ)言的基本語(yǔ)法無(wú)非是數據類(lèi)型、數據結構、運算符、邏輯結構、函數、文件IO、錯誤處理。學(xué)習起來(lái)會(huì )很枯燥,但并不難。
  剛開(kāi)始,你甚至不需要學(xué)習python類(lèi)、多線(xiàn)程、模塊等高難度內容。找本初學(xué)者的教材或者網(wǎng)上教程,花十幾天的時(shí)間,可以對python的基礎有三到四點(diǎn)的了解,這時(shí)候就可以玩爬蟲(chóng)了!
  當然,前提是你這十天一定要認真打好代碼,反復咀嚼語(yǔ)法邏輯,比如列表、字典、字符串、if語(yǔ)句、for循環(huán)等核心東西一定要熟透心手.
  教材選擇比較多。個(gè)人推薦python官方文檔和python簡(jiǎn)明教程。前者更系統,后者更簡(jiǎn)潔。
  三、為什么你需要了解 HTML
  前面提到爬蟲(chóng)想要爬取的數據隱藏在網(wǎng)頁(yè)的HTML中,有點(diǎn)間接!
  維基百科這樣解釋 HTML
  超文本標記語(yǔ)言(英文:Hyper Text Markup Language,簡(jiǎn)稱(chēng) HTML)是一種用于創(chuàng )建網(wǎng)頁(yè)的標準標記語(yǔ)言。HTML 是一項基本技術(shù),經(jīng)常與 CSS 和許多 網(wǎng)站 一起使用來(lái)設計網(wǎng)頁(yè)、Web 應用程序和移動(dòng)應用程序的用戶(hù)界面 [3]。Web 瀏覽器可以讀取 HTML 文件并將它們呈現為可視化網(wǎng)頁(yè)。HTML 描述了 網(wǎng)站 的結構和語(yǔ)義以及線(xiàn)索的呈現,使其成為標記語(yǔ)言而不是編程語(yǔ)言。
  綜上所述,HTML 是一種用于創(chuàng )建網(wǎng)頁(yè)的標記語(yǔ)言,嵌入了文本、圖像等數據,可以被瀏覽器讀取并呈現為我們看到的網(wǎng)頁(yè)。
  這就是為什么我們先爬取 HTML,然后解析數據,因為數據隱藏在 HTML 中。
  學(xué)習HTML并不難,它不是一門(mén)編程語(yǔ)言,你只需要熟悉它的標記規則即可,這里是一個(gè)大致的介紹。
  HTML 標簽包括幾個(gè)關(guān)鍵部分,例如標簽(及其屬性)、基于字符的數據類(lèi)型、字符引用和實(shí)體引用。
  HTML 標簽是最常見(jiàn)的,通常成對出現,例如和。
  在成對出現的標簽中,第一個(gè)標簽是開(kāi)始標簽,第二個(gè)標簽是結束標簽。兩個(gè)標簽之間是元素的內容(文本、圖像等)。有些標簽沒(méi)有內容,是空元素,例如。
  下面是一個(gè)經(jīng)典的 Hello World 程序示例:
  

This is a title


<p>Hello world!

</p>
  HTML 文檔由嵌套的 HTML 元素組成。它們由 HTML 標記表示,括在尖括號中,例如 [56]
  通常,一個(gè)元素由一對標簽表示:“開(kāi)始標簽”和“結束標簽”。如果元素收錄文本內容,則將其放置在這些標簽之間。
  四、了解python網(wǎng)絡(luò )爬蟲(chóng)的基本原理
  在編寫(xiě)python爬蟲(chóng)程序時(shí),只需要做以下兩件事:
  對于這兩件事,python有相應的庫可以幫你做,你只需要知道如何使用它們即可。
  五、 使用python庫抓取百度首頁(yè)標題和圖片
  首先,發(fā)送HTML數據請求,可以使用python內置庫urllib,它有一個(gè)urlopen函數,可以根據url獲取HTML文件。這里,嘗試獲取百度首頁(yè)的HTML內容""
  # 導入urllib庫的urlopen函數
from urllib.request import urlopen
# 發(fā)出請求,獲取html
html = urlopen("https://www.baidu.com/")
# 獲取的html內容是字節,將其轉化為字符串
html_text = bytes.decode(html.read())
# 打印html內容
print(html_text)
  看效果:
  
  部分截取輸出html內容
  我們來(lái)看看真正的百度主頁(yè)的html是什么樣子的。如果您使用的是谷歌瀏覽器,在百度首頁(yè)打開(kāi)設置&gt;更多工具&gt;開(kāi)發(fā)者工具,點(diǎn)擊元素,可以看到:
  
  在 Google Chrome 中查看 HTML
  通過(guò)對比你就會(huì )知道,剛才通過(guò)python程序得到的HTML和網(wǎng)頁(yè)是一樣的!
  獲取到HTML后,下一步就是解析HTML,因為你想要的文字、圖片、視頻都隱藏在HTML中,需要通過(guò)某種方式提取出需要的數據。
  Python 還提供了許多強大的庫來(lái)幫助您解析 HTML。這里使用了著(zhù)名的python庫BeautifulSoup作為解析上面已經(jīng)得到的HTML的工具。
  BeautifulSoup 是第三方庫,需要安裝使用。只需在命令行上使用 pip 安裝它:
  pip install bs4
  BeautifulSoup 會(huì )將 HTML 內容轉換為結構化內容,您只需要從結構化標簽中提取數據即可:
  
  比如我想得到百度首頁(yè)的標題“我點(diǎn)擊百度就知道了”,怎么辦?
  這個(gè)title被兩個(gè)label困住了,一個(gè)是primary label,一個(gè)是secondary label,所以從label里面取出信息就行了。
  
  # 導入urlopen函數
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 打印標題
print(title)
  看看結果:
  
  到此,百度主頁(yè)的標題就提取成功了。
  如果我想下載百度首頁(yè)標志圖片怎么辦?
  第一步是獲取網(wǎng)頁(yè)的所有圖片標簽和網(wǎng)址。這個(gè)可以使用BeautifulSoup的findAll方法,可以提取標簽中收錄的信息。
  一般來(lái)說(shuō),HTML中所有的圖片信息都會(huì )在“img”標簽中,所以我們可以通過(guò)findAll("img")來(lái)獲取所有的圖片信息。
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 使用find_all函數獲取所有圖片的信息
pic_info = obj.find_all(&#39;img&#39;)
# 分別打印每個(gè)圖片的信息
for i in pic_info:
print(i)
  看看結果:
  
  打印所有圖片的屬性,包括class(元素類(lèi)名)、src(鏈接地址)、長(cháng)寬高等。
  其中有一張百度首頁(yè)logo的圖片,圖片的類(lèi)(元素類(lèi)名)為index-logo-src。
  
  [//www.baidu.com/img/bd_logo1.png, //www.baidu.com/img/baidu_jgylogo3.gif]
  可以看到圖片的鏈接地址在src屬性中。我們需要獲取圖片的鏈接地址:
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 打印鏈接
print(logo_url)
  結果:
  
  獲取地址后,可以使用urllib.urlretrieve函數下載logo圖片
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 導入urlretrieve函數,用于下載圖片
from urllib.request import urlretrieve
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 使用urlretrieve下載圖片
  最終圖像保存在'logo.png'
  
  六、結論
  本文以抓取百度首頁(yè)標題和logo圖片為例,講解python爬蟲(chóng)的基本原理以及相關(guān)python庫的使用。這是比較基礎的爬蟲(chóng)知識,還有很多優(yōu)秀的python爬蟲(chóng)庫和框架有待以后學(xué)習。
  當然,如果你掌握了本文討論的知識點(diǎn),你就已經(jīng)開(kāi)始使用python爬蟲(chóng)了。來(lái)吧,男孩!
  這里有一個(gè)方便大家的python學(xué)習交流群:196872581免費領(lǐng)取學(xué)習路線(xiàn)、大綱、課程等資料
   查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng)
)
  這篇文章是針對初學(xué)者的,我會(huì )用最簡(jiǎn)單的案例來(lái)告訴你如何開(kāi)始使用python爬蟲(chóng)!
  開(kāi)始使用Python爬蟲(chóng),首先需要解決四個(gè)問(wèn)題
  一、你應該知道什么是爬蟲(chóng)吧?
  網(wǎng)絡(luò )爬蟲(chóng)其實(shí)叫做Web Data采集,比較容易理解。
  就是通過(guò)編程向Web服務(wù)器請求數據(HTML形式),然后解析HTML,提取出你想要的數據。
  總結為四個(gè)主要步驟:
  根據url獲取HTML數據解析HTML,獲取目標信息存儲數據重復第一步
  這將涉及很多內容,例如數據庫、Web 服務(wù)器、HTTP 協(xié)議、HTML、數據科學(xué)、網(wǎng)絡(luò )安全和圖像處理。但是對于初學(xué)者來(lái)說(shuō),沒(méi)必要掌握那么多。
  二、python學(xué)多少
  如果你不懂python,你需要學(xué)習python,一種非常簡(jiǎn)單的語(yǔ)言(相對于其他語(yǔ)言)。
  編程語(yǔ)言的基本語(yǔ)法無(wú)非是數據類(lèi)型、數據結構、運算符、邏輯結構、函數、文件IO、錯誤處理。學(xué)習起來(lái)會(huì )很枯燥,但并不難。
  剛開(kāi)始,你甚至不需要學(xué)習python類(lèi)、多線(xiàn)程、模塊等高難度內容。找本初學(xué)者的教材或者網(wǎng)上教程,花十幾天的時(shí)間,可以對python的基礎有三到四點(diǎn)的了解,這時(shí)候就可以玩爬蟲(chóng)了!
  當然,前提是你這十天一定要認真打好代碼,反復咀嚼語(yǔ)法邏輯,比如列表、字典、字符串、if語(yǔ)句、for循環(huán)等核心東西一定要熟透心手.
  教材選擇比較多。個(gè)人推薦python官方文檔和python簡(jiǎn)明教程。前者更系統,后者更簡(jiǎn)潔。
  三、為什么你需要了解 HTML
  前面提到爬蟲(chóng)想要爬取的數據隱藏在網(wǎng)頁(yè)的HTML中,有點(diǎn)間接!
  維基百科這樣解釋 HTML
  超文本標記語(yǔ)言(英文:Hyper Text Markup Language,簡(jiǎn)稱(chēng) HTML)是一種用于創(chuàng )建網(wǎng)頁(yè)的標準標記語(yǔ)言。HTML 是一項基本技術(shù),經(jīng)常與 CSS 和許多 網(wǎng)站 一起使用來(lái)設計網(wǎng)頁(yè)、Web 應用程序和移動(dòng)應用程序的用戶(hù)界面 [3]。Web 瀏覽器可以讀取 HTML 文件并將它們呈現為可視化網(wǎng)頁(yè)。HTML 描述了 網(wǎng)站 的結構和語(yǔ)義以及線(xiàn)索的呈現,使其成為標記語(yǔ)言而不是編程語(yǔ)言。
  綜上所述,HTML 是一種用于創(chuàng )建網(wǎng)頁(yè)的標記語(yǔ)言,嵌入了文本、圖像等數據,可以被瀏覽器讀取并呈現為我們看到的網(wǎng)頁(yè)。
  這就是為什么我們先爬取 HTML,然后解析數據,因為數據隱藏在 HTML 中。
  學(xué)習HTML并不難,它不是一門(mén)編程語(yǔ)言,你只需要熟悉它的標記規則即可,這里是一個(gè)大致的介紹。
  HTML 標簽包括幾個(gè)關(guān)鍵部分,例如標簽(及其屬性)、基于字符的數據類(lèi)型、字符引用和實(shí)體引用。
  HTML 標簽是最常見(jiàn)的,通常成對出現,例如和。
  在成對出現的標簽中,第一個(gè)標簽是開(kāi)始標簽,第二個(gè)標簽是結束標簽。兩個(gè)標簽之間是元素的內容(文本、圖像等)。有些標簽沒(méi)有內容,是空元素,例如。
  下面是一個(gè)經(jīng)典的 Hello World 程序示例:
  

This is a title


<p>Hello world!

</p>
  HTML 文檔由嵌套的 HTML 元素組成。它們由 HTML 標記表示,括在尖括號中,例如 [56]
  通常,一個(gè)元素由一對標簽表示:“開(kāi)始標簽”和“結束標簽”。如果元素收錄文本內容,則將其放置在這些標簽之間。
  四、了解python網(wǎng)絡(luò )爬蟲(chóng)的基本原理
  在編寫(xiě)python爬蟲(chóng)程序時(shí),只需要做以下兩件事:
  對于這兩件事,python有相應的庫可以幫你做,你只需要知道如何使用它們即可。
  五、 使用python庫抓取百度首頁(yè)標題和圖片
  首先,發(fā)送HTML數據請求,可以使用python內置庫urllib,它有一個(gè)urlopen函數,可以根據url獲取HTML文件。這里,嘗試獲取百度首頁(yè)的HTML內容""
  # 導入urllib庫的urlopen函數
from urllib.request import urlopen
# 發(fā)出請求,獲取html
html = urlopen("https://www.baidu.com/";)
# 獲取的html內容是字節,將其轉化為字符串
html_text = bytes.decode(html.read())
# 打印html內容
print(html_text)
  看效果:
  
  部分截取輸出html內容
  我們來(lái)看看真正的百度主頁(yè)的html是什么樣子的。如果您使用的是谷歌瀏覽器,在百度首頁(yè)打開(kāi)設置&gt;更多工具&gt;開(kāi)發(fā)者工具,點(diǎn)擊元素,可以看到:
  
  在 Google Chrome 中查看 HTML
  通過(guò)對比你就會(huì )知道,剛才通過(guò)python程序得到的HTML和網(wǎng)頁(yè)是一樣的!
  獲取到HTML后,下一步就是解析HTML,因為你想要的文字、圖片、視頻都隱藏在HTML中,需要通過(guò)某種方式提取出需要的數據。
  Python 還提供了許多強大的庫來(lái)幫助您解析 HTML。這里使用了著(zhù)名的python庫BeautifulSoup作為解析上面已經(jīng)得到的HTML的工具。
  BeautifulSoup 是第三方庫,需要安裝使用。只需在命令行上使用 pip 安裝它:
  pip install bs4
  BeautifulSoup 會(huì )將 HTML 內容轉換為結構化內容,您只需要從結構化標簽中提取數據即可:
  
  比如我想得到百度首頁(yè)的標題“我點(diǎn)擊百度就知道了”,怎么辦?
  這個(gè)title被兩個(gè)label困住了,一個(gè)是primary label,一個(gè)是secondary label,所以從label里面取出信息就行了。
  
  # 導入urlopen函數
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 打印標題
print(title)
  看看結果:
  
  到此,百度主頁(yè)的標題就提取成功了。
  如果我想下載百度首頁(yè)標志圖片怎么辦?
  第一步是獲取網(wǎng)頁(yè)的所有圖片標簽和網(wǎng)址。這個(gè)可以使用BeautifulSoup的findAll方法,可以提取標簽中收錄的信息。
  一般來(lái)說(shuō),HTML中所有的圖片信息都會(huì )在“img”標簽中,所以我們可以通過(guò)findAll("img")來(lái)獲取所有的圖片信息。
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 使用find_all函數獲取所有圖片的信息
pic_info = obj.find_all(&#39;img&#39;)
# 分別打印每個(gè)圖片的信息
for i in pic_info:
print(i)
  看看結果:
  
  打印所有圖片的屬性,包括class(元素類(lèi)名)、src(鏈接地址)、長(cháng)寬高等。
  其中有一張百度首頁(yè)logo的圖片,圖片的類(lèi)(元素類(lèi)名)為index-logo-src。
  
  [//www.baidu.com/img/bd_logo1.png, //www.baidu.com/img/baidu_jgylogo3.gif]
  可以看到圖片的鏈接地址在src屬性中。我們需要獲取圖片的鏈接地址:
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 打印鏈接
print(logo_url)
  結果:
  
  獲取地址后,可以使用urllib.urlretrieve函數下載logo圖片
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 導入urlretrieve函數,用于下載圖片
from urllib.request import urlretrieve
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 使用urlretrieve下載圖片
  最終圖像保存在'logo.png'
  
  六、結論
  本文以抓取百度首頁(yè)標題和logo圖片為例,講解python爬蟲(chóng)的基本原理以及相關(guān)python庫的使用。這是比較基礎的爬蟲(chóng)知識,還有很多優(yōu)秀的python爬蟲(chóng)庫和框架有待以后學(xué)習。
  當然,如果你掌握了本文討論的知識點(diǎn),你就已經(jīng)開(kāi)始使用python爬蟲(chóng)了。來(lái)吧,男孩!
  這里有一個(gè)方便大家的python學(xué)習交流群:196872581免費領(lǐng)取學(xué)習路線(xiàn)、大綱、課程等資料
  

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 82 次瀏覽 ? 2021-09-29 03:27 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)
  爬蟲(chóng)筆記 [01]
  一、前言
  記錄下自己爬蟲(chóng)練習的開(kāi)始和結束,這次用下載的圖片來(lái)展示主要過(guò)程。
  二、 爬蟲(chóng)邏輯理解
  網(wǎng)頁(yè)上的幾乎所有內容都在服務(wù)器上。在網(wǎng)上查東西時(shí),類(lèi)似于對服務(wù)器說(shuō):“我想看滑雪的照片”。服務(wù)器首先聽(tīng)到您的喊叫聲,然后嗡嗡作響。開(kāi)始向您發(fā)送帶有代碼的服務(wù)器滑雪圖片和網(wǎng)頁(yè)。數據當然是二進(jìn)制的,所以你需要把數據編碼成人類(lèi)可以理解的東西。最后顯示出你想要的圖片,你可以下載保存到電腦中。
  整個(gè)過(guò)程就是有人要東西,服務(wù)器聽(tīng)到有人要東西,服務(wù)器把東西發(fā)給你,你通過(guò)各種方式調出具體的內容。
  三、 爬圖
  爬蟲(chóng)需要導入requests庫,用于向服務(wù)器請求內容(發(fā)送請求)。os 庫用于目錄和文件操作,這是一個(gè)非?;A的操作。
  # 導入使用的庫
import requests
import os
  在百度貼吧上找到了一張滑雪的圖片,想下載。直接另存為很方便,不能手動(dòng)存成1000張。
  
  一、右鍵復制圖片地址
  
  # 圖片地址存到變量中
imurl = &#39;http://tiebapic.baidu.com/forum/w%3D580%3B/sign=\ac30c67119f41bd5da53e8fc61e180cb/78310a55b319ebc4666b57c39526cffc1e17165c.jpg&#39;
  然后我們需要找到一個(gè)叫做“請求頭”的東西,理解為個(gè)人名字,服務(wù)器需要知道是誰(shuí)在請求這個(gè)東西,而user-agent主要收錄瀏覽器的信息。因為爬蟲(chóng)是模擬成年人用電腦搜索內容的方式,如果user-agent不是瀏覽器的名字,很可能就是爬蟲(chóng),會(huì )被攔截。
  
  # 從瀏覽器中復制下來(lái)后,要用字典類(lèi)型包起來(lái),鍵值都是字符串類(lèi)型
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36&#39;}
# 這里就是做一個(gè)向服務(wù)器要內容的請求,對應的連接和偽裝的瀏覽器名字。
# imr是服務(wù)器對你請求的回答(響應),包含了圖片數據在內的一些信息
imr = requests.get(url = imurl, headers = headers)
# 觀(guān)察狀態(tài)碼,就是看服務(wù)器到底有沒(méi)有理你,理你了就代表請求成功
# 如果是狀態(tài)碼是200,就代表服務(wù)器理你了
print(imr.status_code)
  
  最終結論取決于編碼是什么。如果編碼不同,最終的信息就會(huì )亂七八糟。
  # 一般utf8是正確的編碼,常規操作是imr.encoding = imr.apparent_encoding
print(imr.encoding)
print(imr.apparent_coding)
# 查看當前操作目錄,做一個(gè)新目錄出來(lái)
cwd = os.getcwd()
print(cwd)
newpath = os.mkdir(cwd + &#39;/spider&#39;)
path_photo = cwd + &#39;/spider/snowboarding.png&#39;
# 圖片是二進(jìn)制,所以用wb的模式進(jìn)行寫(xiě)入
with open(pathn_photo, &#39;wb&#39;) as im:
im.write(imr.content)
  最后我們下載了圖片 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)
  爬蟲(chóng)筆記 [01]
  一、前言
  記錄下自己爬蟲(chóng)練習的開(kāi)始和結束,這次用下載的圖片來(lái)展示主要過(guò)程。
  二、 爬蟲(chóng)邏輯理解
  網(wǎng)頁(yè)上的幾乎所有內容都在服務(wù)器上。在網(wǎng)上查東西時(shí),類(lèi)似于對服務(wù)器說(shuō):“我想看滑雪的照片”。服務(wù)器首先聽(tīng)到您的喊叫聲,然后嗡嗡作響。開(kāi)始向您發(fā)送帶有代碼的服務(wù)器滑雪圖片和網(wǎng)頁(yè)。數據當然是二進(jìn)制的,所以你需要把數據編碼成人類(lèi)可以理解的東西。最后顯示出你想要的圖片,你可以下載保存到電腦中。
  整個(gè)過(guò)程就是有人要東西,服務(wù)器聽(tīng)到有人要東西,服務(wù)器把東西發(fā)給你,你通過(guò)各種方式調出具體的內容。
  三、 爬圖
  爬蟲(chóng)需要導入requests庫,用于向服務(wù)器請求內容(發(fā)送請求)。os 庫用于目錄和文件操作,這是一個(gè)非?;A的操作。
  # 導入使用的庫
import requests
import os
  在百度貼吧上找到了一張滑雪的圖片,想下載。直接另存為很方便,不能手動(dòng)存成1000張。
  
  一、右鍵復制圖片地址
  
  # 圖片地址存到變量中
imurl = &#39;http://tiebapic.baidu.com/forum/w%3D580%3B/sign=\ac30c67119f41bd5da53e8fc61e180cb/78310a55b319ebc4666b57c39526cffc1e17165c.jpg&#39;
  然后我們需要找到一個(gè)叫做“請求頭”的東西,理解為個(gè)人名字,服務(wù)器需要知道是誰(shuí)在請求這個(gè)東西,而user-agent主要收錄瀏覽器的信息。因為爬蟲(chóng)是模擬成年人用電腦搜索內容的方式,如果user-agent不是瀏覽器的名字,很可能就是爬蟲(chóng),會(huì )被攔截。
  
  # 從瀏覽器中復制下來(lái)后,要用字典類(lèi)型包起來(lái),鍵值都是字符串類(lèi)型
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36&#39;}
# 這里就是做一個(gè)向服務(wù)器要內容的請求,對應的連接和偽裝的瀏覽器名字。
# imr是服務(wù)器對你請求的回答(響應),包含了圖片數據在內的一些信息
imr = requests.get(url = imurl, headers = headers)
# 觀(guān)察狀態(tài)碼,就是看服務(wù)器到底有沒(méi)有理你,理你了就代表請求成功
# 如果是狀態(tài)碼是200,就代表服務(wù)器理你了
print(imr.status_code)
  
  最終結論取決于編碼是什么。如果編碼不同,最終的信息就會(huì )亂七八糟。
  # 一般utf8是正確的編碼,常規操作是imr.encoding = imr.apparent_encoding
print(imr.encoding)
print(imr.apparent_coding)
# 查看當前操作目錄,做一個(gè)新目錄出來(lái)
cwd = os.getcwd()
print(cwd)
newpath = os.mkdir(cwd + &#39;/spider&#39;)
path_photo = cwd + &#39;/spider/snowboarding.png&#39;
# 圖片是二進(jìn)制,所以用wb的模式進(jìn)行寫(xiě)入
with open(pathn_photo, &#39;wb&#39;) as im:
im.write(imr.content)
  最后我們下載了圖片

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-29 03:26 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))
  爬蟲(chóng)訓練項目1_爬行百度貼吧
  前言
  這是我開(kāi)始學(xué)習爬蟲(chóng)時(shí)的第一個(gè)手工練習項目。在B站看到了一些教學(xué)視頻,覺(jué)得挺有意思的,就決定跟上。
  
  1、找到對方的c位置(確定要爬取的目標)
  要抓取網(wǎng)頁(yè),首先需要知道網(wǎng)頁(yè)的 url
  首先用瀏覽器打開(kāi)貼吧網(wǎng)頁(yè)。
  
  搜索“上海海事大學(xué)”
  發(fā)現鏈接變?yōu)樯虾:J麓髮W(xué)&amp;fr=search
  
  點(diǎn)擊到第二頁(yè),再次觀(guān)察url,發(fā)現多了一個(gè)pn=50的參數
  
  嘗試將pn=50改為pn=0,發(fā)現剛才訪(fǎng)問(wèn)的是第一頁(yè)的內容。
  于是找到規則,第一頁(yè)pn=0,第二頁(yè)pn=50,
  那么第三頁(yè)應該是pn=100,依此類(lèi)推
  至于另一個(gè)參數:ie=utf-8,可以刪除
  所以,我們需要訪(fǎng)問(wèn)的鏈接格式是
  ——&amp;Pn=——
  2、發(fā)起進(jìn)攻(發(fā)送請求)
  上一步我們已經(jīng)知道要爬取的url
  現在你需要發(fā)送請求
  至于如何發(fā)送請求
  我們需要安裝一個(gè)庫:請求庫
  pip 安裝請求
  然后導入這個(gè)庫
  import requests
  然后開(kāi)始構造url并存入列表
  url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
  復制瀏覽器logo,放在headers中(有的網(wǎng)站會(huì )根據瀏覽器logo判斷是否是爬蟲(chóng),所以加個(gè)logo防止一)
  headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
  
  然后發(fā)送請求并保存頁(yè)面
  for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  3、 攻擊敵方水晶(完整代碼)
  """
獲取貼吧內容
"""
import requests
url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  然后在pycharm中打開(kāi)保存的網(wǎng)頁(yè)并運行
  
  
  和瀏覽器搜索到的網(wǎng)頁(yè)一模一樣
  勝利
  至此,你已經(jīng)基本完成了學(xué)習爬蟲(chóng)的第一步
  以后學(xué)爬的時(shí)候會(huì )慢慢更新其他的訓練項目 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))
  爬蟲(chóng)訓練項目1_爬行百度貼吧
  前言
  這是我開(kāi)始學(xué)習爬蟲(chóng)時(shí)的第一個(gè)手工練習項目。在B站看到了一些教學(xué)視頻,覺(jué)得挺有意思的,就決定跟上。
  
  1、找到對方的c位置(確定要爬取的目標)
  要抓取網(wǎng)頁(yè),首先需要知道網(wǎng)頁(yè)的 url
  首先用瀏覽器打開(kāi)貼吧網(wǎng)頁(yè)。
  
  搜索“上海海事大學(xué)”
  發(fā)現鏈接變?yōu)樯虾:J麓髮W(xué)&amp;fr=search
  
  點(diǎn)擊到第二頁(yè),再次觀(guān)察url,發(fā)現多了一個(gè)pn=50的參數
  
  嘗試將pn=50改為pn=0,發(fā)現剛才訪(fǎng)問(wèn)的是第一頁(yè)的內容。
  于是找到規則,第一頁(yè)pn=0,第二頁(yè)pn=50,
  那么第三頁(yè)應該是pn=100,依此類(lèi)推
  至于另一個(gè)參數:ie=utf-8,可以刪除
  所以,我們需要訪(fǎng)問(wèn)的鏈接格式是
  ——&amp;Pn=——
  2、發(fā)起進(jìn)攻(發(fā)送請求)
  上一步我們已經(jīng)知道要爬取的url
  現在你需要發(fā)送請求
  至于如何發(fā)送請求
  我們需要安裝一個(gè)庫:請求庫
  pip 安裝請求
  然后導入這個(gè)庫
  import requests
  然后開(kāi)始構造url并存入列表
  url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
  復制瀏覽器logo,放在headers中(有的網(wǎng)站會(huì )根據瀏覽器logo判斷是否是爬蟲(chóng),所以加個(gè)logo防止一)
  headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
  
  然后發(fā)送請求并保存頁(yè)面
  for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  3、 攻擊敵方水晶(完整代碼)
  """
獲取貼吧內容
"""
import requests
url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  然后在pycharm中打開(kāi)保存的網(wǎng)頁(yè)并運行
  
  
  和瀏覽器搜索到的網(wǎng)頁(yè)一模一樣
  勝利
  至此,你已經(jīng)基本完成了學(xué)習爬蟲(chóng)的第一步
  以后學(xué)爬的時(shí)候會(huì )慢慢更新其他的訓練項目

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2021-09-25 04:10 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)
  說(shuō)些什么
  其實(shí)一直對python這個(gè)語(yǔ)言很感興趣,但是之前一直在做圖像處理相關(guān)的事情,所以沒(méi)怎么關(guān)注這種不能觸及底層內存處理的語(yǔ)言,但是最近才真正用上通過(guò) C++ 字符。字符串處理和復雜的網(wǎng)絡(luò )框架崩潰了,看到大家都說(shuō)python很好玩,所以趁著(zhù)最近沒(méi)事的時(shí)候學(xué)習了python。
  昨天關(guān)注了廖雪峰老師的python教程(推薦基礎教程)??戳嘶镜臄祿Y構和邏輯后,我決定直接從一個(gè)實(shí)際的小項目來(lái)實(shí)踐。最好的語(yǔ)言方式),所以就選擇了一個(gè)比較簡(jiǎn)單的python爬蟲(chóng)項目來(lái)練習。
  寫(xiě)爬蟲(chóng)最重要的就是了解我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)是什么。其實(shí)我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)源代碼是一個(gè)字符串文件(當然也可以說(shuō)是二進(jìn)制文件)
  每次我們在瀏覽器上輸入一個(gè)網(wǎng)址,比如這個(gè)網(wǎng)址,瀏覽器會(huì )幫我們訪(fǎng)問(wèn)遠程服務(wù)器,并根據綁定的ip地址發(fā)送請求,遠程服務(wù)器會(huì )發(fā)送這個(gè)網(wǎng)頁(yè)的源代碼直接打包發(fā)送給我們的瀏覽器(html文件格式),然后我們的瀏覽器會(huì )解析這個(gè)字符串文件,比如通過(guò)div格式化和渲染網(wǎng)頁(yè),h1、h2 layouts 顯示,繼續發(fā)送請求給遠程服務(wù)器為img這些資源獲取圖片,然后在網(wǎng)頁(yè)上填寫(xiě)。
  什么是爬蟲(chóng)
  怎么說(shuō)呢,爬蟲(chóng),簡(jiǎn)單來(lái)說(shuō)就是模擬瀏覽器獲取一個(gè)網(wǎng)頁(yè)的源代碼。至于你用源代碼做什么,沒(méi)關(guān)系。
  說(shuō)的更復雜一點(diǎn),爬蟲(chóng)其實(shí)就是對所有網(wǎng)頁(yè)數據處理的綜合,比如:自動(dòng)抓取網(wǎng)頁(yè)源代碼,分析網(wǎng)頁(yè)數據,獲取關(guān)鍵數據并保存,或者自動(dòng)下載需要的網(wǎng)頁(yè)圖片、音頻,和視頻。
  那么當我們在寫(xiě)一個(gè)pythonm爬蟲(chóng)的時(shí)候,我們在寫(xiě)什么呢?
  當我們需要爬蟲(chóng)的時(shí)候,一般會(huì )遇到比較復雜的數據需求。這個(gè)要求對于手工作業(yè)來(lái)說(shuō)是非常復雜的。僅此要求就可以由爬蟲(chóng)輕松解決。
  那么首先確定我們的需求,我們需要這個(gè)爬蟲(chóng)做什么?
  比如我們認為一個(gè)教學(xué)網(wǎng)站的數據很有趣,但是它的格式太復雜,或者需要頻繁翻頁(yè),不能通過(guò)復制粘貼輕易獲取,爬蟲(chóng)就會(huì )起作用。
  總之,我們以一個(gè)爬蟲(chóng)的例子來(lái)說(shuō)明。
  爬取百度圖片ps:python版-Python 3.7.0
  第一個(gè)爬蟲(chóng)當然不能選擇太復雜的東西,涉及到很多復雜的網(wǎng)絡(luò )規則,所以我們來(lái)爬一些網(wǎng)站,簡(jiǎn)單的讓爬蟲(chóng)去爬。
  比如抓取下載關(guān)鍵詞下的某百度圖片的圖片數據。
  1、建立需求
  暫時(shí)確定以上需求,然后開(kāi)始寫(xiě)真正的爬蟲(chóng)代碼
  2、 觀(guān)察網(wǎng)頁(yè)源碼
  首先打開(kāi)百度圖片,隨意搜索一個(gè)關(guān)鍵詞。比如這次我會(huì )用我最喜歡的動(dòng)漫角色栗山未來(lái)來(lái)測試
  右鍵查看網(wǎng)頁(yè)源碼,可以看到每張圖片的原創(chuàng )地址都是以一個(gè)簡(jiǎn)單的“objURL”開(kāi)頭,以一個(gè)小逗號結尾,如下:
  
  基于此,我們可以確定爬蟲(chóng)應該如何運行。很簡(jiǎn)單——從網(wǎng)頁(yè)源碼中提取這些url并下載\(^o^)/~
  3、獲取網(wǎng)頁(yè)源碼
  其實(shí)這一步我是不想寫(xiě)的,只是擔心看了我博客剛學(xué)python的朋友可能會(huì )出錯,所以說(shuō)一下。
  首先,我們需要在python中導入網(wǎng)絡(luò )庫urllib。因為我們需要用到的urlopen和read方法在我的python版本中,直接引用urllib會(huì )出錯,所以一般使用這個(gè)import:import urllib.request
  提取網(wǎng)頁(yè)源代碼的整個(gè)方法如下:
  import urllib.request
def get_html(httpUrl):
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
  我們可以將這個(gè)方法打包成一個(gè)py文件,然后直接在其他py文件中導入這個(gè)方法,然后直接使用我們寫(xiě)的get_html方法。
  然后將上面得到的二進(jìn)制文件解碼成普通字符串:
  html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
  4、提取圖片地址
  從網(wǎng)頁(yè)的源代碼中提取關(guān)鍵數據時(shí),實(shí)際上是字符串匹配。如果這樣估計C++累死我了,當然我也寫(xiě)過(guò)類(lèi)似的,甚至更復雜的,真的是痛苦的回憶。
  這里推薦一個(gè)比較簡(jiǎn)單的字符串搜索和匹配程序-正則表達式,也稱(chēng)為正則表達式。(英文:Regular Expression,在代碼中??s寫(xiě)為regex、regexp或RE)
  當然,如何使用正則表達式我就不多說(shuō)了。你可以自己搜索每個(gè)視頻網(wǎng)站,看個(gè)大概就夠了,或者直接看這里——正則表達式基礎
  了解正則表達式的基本邏輯就可以了。
  進(jìn)入正題,上面的步驟已經(jīng)分析到每張圖片的原創(chuàng )地址開(kāi)頭都有一個(gè)很簡(jiǎn)單的“objURL”,所以我們正則化的關(guān)鍵就是把“objURL”后面的地址取出來(lái)。這個(gè)很簡(jiǎn)單,我直接把寫(xiě)好的正則表達式拿出來(lái):
  reg=r&#39;"objURL":"(.*?)",&#39;
  ps:字符串前的r主要是為了防止轉義字符丟失導致的字符丟失
  這個(gè)規律的作用如下:
  匹配任何以 "objURL":" 開(kāi)頭并以 ", 結尾的字符串
  然后簡(jiǎn)單地編譯這個(gè)正則(記得導入 re 包):
  import re
reg=r&#39;"objURL":"(.*?)",&#39;
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
  然后使用上面編譯的正則表達式解析第三步得到的字符串,如下:
  pic_list = reg_compile.findall(html_str)
  上面的 pic_list 是一個(gè)簡(jiǎn)單的列表
  輸出列表中的數據:
   for pic in pic_list:
print(pic)
  輸出如下:
  http://b-ssl.duitang.com/uploa ... .jpeg
http://b-ssl.duitang.com/uploa ... .jpeg
http://cdnq.duitang.com/upload ... .jpeg
http://wxpic.7399.com/nqvaoZto ... cpNpu
http://i1.hdslb.com/bfs/archiv ... 0.jpg
http://wxpic.7399.com/nqvaoZto ... cpNpu
  可以清楚的看到,有些地址不是圖片地址。這可以說(shuō)是我正則化的問(wèn)題,但也無(wú)傷大雅(其實(shí)我也懶得改了)。一點(diǎn)判斷就可以完美解決(由于所有圖片地址都以g結尾,比如png、jpg、jpeg^_^)
  for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
  完美解,w(?Д?)w
  ps:哈哈哈,這里當然是玩笑了,大家記得想好辦法改正,算是小測試,畢竟真的是無(wú)害的。
  5、下載圖片
  下載圖片也很簡(jiǎn)單。正如我開(kāi)頭所說(shuō)的,圖片實(shí)際上是存在于遠程服務(wù)器上的圖片文件。只要服務(wù)器允許,我們可以很容易的通過(guò)GET請求得到這張圖片。畢竟,瀏覽器也會(huì )這樣做。,至于你得到的,沒(méi)人管它是用來(lái)實(shí)際填網(wǎng)頁(yè)還是給自己用。
  python中下載圖片的方式有很多種,如下三種
 ?。ㄒ韵麓a不是我寫(xiě)的,不知道版本對不對,如有錯誤請自行百度。第一種在我的版本中沒(méi)有問(wèn)題):
  def urllib_download(url):
from urllib.request import urlretrieve
urlretrieve(url, &#39;1.png&#39;)

def request_download(url):
import requests
r = requests.get(url)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
f.write(r.content)

def chunk_download(url):
import requests
r = requests.get(url, stream=True)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)

  所以我們只需要下載上面列表中的每個(gè)圖片網(wǎng)址。我選擇了上面的第一個(gè)。這是urllib.request中存在的一個(gè)方法,定義如下:
  urllib.request.urlretrieve(url, filename, reporthook, data)
參數說(shuō)明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數,urllib會(huì )生成一個(gè)臨時(shí)文件來(lái)保存數據);
reporthook:是一個(gè)回調函數,當連接上服務(wù)器、以及相應的數據塊傳輸完畢的時(shí)候會(huì )觸發(fā)該回調。我們可以利用這個(gè)回調函數來(lái)顯示當前的下載進(jìn)度。
data:指post到服務(wù)器的數據。該方法返回一個(gè)包含兩個(gè)元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應頭。
  然后一個(gè)簡(jiǎn)單的循環(huán)下載就可以了:
  def download_pic(pic_adr,x):
urllib.request.urlretrieve(pic_adr, &#39;%s.jpg&#39; %x)
# &#39;./images/%s.jpg&#39;,這里也可以自己選擇創(chuàng )建一個(gè)文件吧所有圖片放進(jìn)去,而不是直接放在當前目錄下

x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
download_pic(pic,x)
x += 1
  當然需要為每張圖片選擇一個(gè)本地名稱(chēng),只需將名稱(chēng)增加1234即可。
  這樣,我們就結束了整個(gè)爬取過(guò)程。執行后效果如下:
  
  可以看到,效果還是不錯的。畢竟,只要把它放在那里,讓它自己下載。還可以考慮如何翻頁(yè)的效果。事實(shí)上,這很簡(jiǎn)單。我就講實(shí)現一個(gè)變化。關(guān)鍵詞的效果提醒大家(其實(shí)是因為我有點(diǎn)懶,不想寫(xiě)了)
  6、更改搜索關(guān)鍵詞
  看百度搜索頁(yè)面的網(wǎng)址:
  
  觀(guān)察這個(gè)網(wǎng)址,我們很容易發(fā)現原來(lái)最后一個(gè)關(guān)鍵字是關(guān)鍵詞。復制就改了,但是復制之后就不簡(jiǎn)單了:
  http://image.baidu.com/search/ ... %25A5
  為什么word變成%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
  這么一堆東西?
  很簡(jiǎn)單,因為url是ASCII碼,而這里我們用的是中文,只要稍微操作一下就可以轉:
  keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
  urllib.parse.quote 是解碼后的代碼,在最后加上關(guān)鍵字就OK了。
  簡(jiǎn)單,這個(gè)簡(jiǎn)單的python爬蟲(chóng)就完成了。.
  雖然還是想自己寫(xiě)字符串識別,但是regular真的好用。建議多學(xué)習一些常規的騷技能。
  就這樣。
  如需修改,請自行復制完整代碼并進(jìn)行更改。下載多個(gè)頁(yè)面也是很簡(jiǎn)單的操作,就不多說(shuō)了,還是可以加多線(xiàn)程,代理,動(dòng)態(tài)ip。無(wú)論如何,這就是我的第一個(gè)爬蟲(chóng)。
  完整源碼(百度圖片爬蟲(chóng))
  import urllib
import time
from urllib.request import urlretrieve
import re
import urllib.request
def get_html(httpUrl):#獲取網(wǎng)頁(yè)源碼
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
def get_keyword_urllist(keyword):#爬取當前關(guān)鍵詞下的圖片地址
keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
pic_list = reg_compile.findall(html_str)
return pic_list
keyword="栗山未來(lái)"#自己修改,或者自己寫(xiě)個(gè)input或者一個(gè)txt自己讀就完事了,甚至你寫(xiě)一個(gè)配置表,把爬取數量、爬取關(guān)鍵詞、爬取圖片大小都寫(xiě)好都可以
pic_list=get_keyword_urllist(keyword)
x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
name = keyword+str(x)
time.sleep(0.01)
urllib.request.urlretrieve(pic, &#39;./images/%s.jpg&#39; %name)
x += 1

  如果不行,請檢查收錄的模板是否正確或版本是否正確。
  重點(diǎn)
  最后運行上面的源碼,應該會(huì )發(fā)現雖然可以下載,但是下載速度太慢了。解決它需要幾秒鐘,但如果它更慢,則可能需要十秒鐘以上。
  針對這種情況,我重寫(xiě)了上面的代碼,加入了多線(xiàn)程處理,將爬取時(shí)間縮短到1s以?xún)?。我是直接上傳到我的github上的,大家可以自己下載。
  快速爬取百度圖片-爬蟲(chóng)1.0版 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)
  說(shuō)些什么
  其實(shí)一直對python這個(gè)語(yǔ)言很感興趣,但是之前一直在做圖像處理相關(guān)的事情,所以沒(méi)怎么關(guān)注這種不能觸及底層內存處理的語(yǔ)言,但是最近才真正用上通過(guò) C++ 字符。字符串處理和復雜的網(wǎng)絡(luò )框架崩潰了,看到大家都說(shuō)python很好玩,所以趁著(zhù)最近沒(méi)事的時(shí)候學(xué)習了python。
  昨天關(guān)注了廖雪峰老師的python教程(推薦基礎教程)??戳嘶镜臄祿Y構和邏輯后,我決定直接從一個(gè)實(shí)際的小項目來(lái)實(shí)踐。最好的語(yǔ)言方式),所以就選擇了一個(gè)比較簡(jiǎn)單的python爬蟲(chóng)項目來(lái)練習。
  寫(xiě)爬蟲(chóng)最重要的就是了解我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)是什么。其實(shí)我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)源代碼是一個(gè)字符串文件(當然也可以說(shuō)是二進(jìn)制文件)
  每次我們在瀏覽器上輸入一個(gè)網(wǎng)址,比如這個(gè)網(wǎng)址,瀏覽器會(huì )幫我們訪(fǎng)問(wèn)遠程服務(wù)器,并根據綁定的ip地址發(fā)送請求,遠程服務(wù)器會(huì )發(fā)送這個(gè)網(wǎng)頁(yè)的源代碼直接打包發(fā)送給我們的瀏覽器(html文件格式),然后我們的瀏覽器會(huì )解析這個(gè)字符串文件,比如通過(guò)div格式化和渲染網(wǎng)頁(yè),h1、h2 layouts 顯示,繼續發(fā)送請求給遠程服務(wù)器為img這些資源獲取圖片,然后在網(wǎng)頁(yè)上填寫(xiě)。
  什么是爬蟲(chóng)
  怎么說(shuō)呢,爬蟲(chóng),簡(jiǎn)單來(lái)說(shuō)就是模擬瀏覽器獲取一個(gè)網(wǎng)頁(yè)的源代碼。至于你用源代碼做什么,沒(méi)關(guān)系。
  說(shuō)的更復雜一點(diǎn),爬蟲(chóng)其實(shí)就是對所有網(wǎng)頁(yè)數據處理的綜合,比如:自動(dòng)抓取網(wǎng)頁(yè)源代碼,分析網(wǎng)頁(yè)數據,獲取關(guān)鍵數據并保存,或者自動(dòng)下載需要的網(wǎng)頁(yè)圖片、音頻,和視頻。
  那么當我們在寫(xiě)一個(gè)pythonm爬蟲(chóng)的時(shí)候,我們在寫(xiě)什么呢?
  當我們需要爬蟲(chóng)的時(shí)候,一般會(huì )遇到比較復雜的數據需求。這個(gè)要求對于手工作業(yè)來(lái)說(shuō)是非常復雜的。僅此要求就可以由爬蟲(chóng)輕松解決。
  那么首先確定我們的需求,我們需要這個(gè)爬蟲(chóng)做什么?
  比如我們認為一個(gè)教學(xué)網(wǎng)站的數據很有趣,但是它的格式太復雜,或者需要頻繁翻頁(yè),不能通過(guò)復制粘貼輕易獲取,爬蟲(chóng)就會(huì )起作用。
  總之,我們以一個(gè)爬蟲(chóng)的例子來(lái)說(shuō)明。
  爬取百度圖片ps:python版-Python 3.7.0
  第一個(gè)爬蟲(chóng)當然不能選擇太復雜的東西,涉及到很多復雜的網(wǎng)絡(luò )規則,所以我們來(lái)爬一些網(wǎng)站,簡(jiǎn)單的讓爬蟲(chóng)去爬。
  比如抓取下載關(guān)鍵詞下的某百度圖片的圖片數據。
  1、建立需求
  暫時(shí)確定以上需求,然后開(kāi)始寫(xiě)真正的爬蟲(chóng)代碼
  2、 觀(guān)察網(wǎng)頁(yè)源碼
  首先打開(kāi)百度圖片,隨意搜索一個(gè)關(guān)鍵詞。比如這次我會(huì )用我最喜歡的動(dòng)漫角色栗山未來(lái)來(lái)測試
  右鍵查看網(wǎng)頁(yè)源碼,可以看到每張圖片的原創(chuàng )地址都是以一個(gè)簡(jiǎn)單的“objURL”開(kāi)頭,以一個(gè)小逗號結尾,如下:
  
  基于此,我們可以確定爬蟲(chóng)應該如何運行。很簡(jiǎn)單——從網(wǎng)頁(yè)源碼中提取這些url并下載\(^o^)/~
  3、獲取網(wǎng)頁(yè)源碼
  其實(shí)這一步我是不想寫(xiě)的,只是擔心看了我博客剛學(xué)python的朋友可能會(huì )出錯,所以說(shuō)一下。
  首先,我們需要在python中導入網(wǎng)絡(luò )庫urllib。因為我們需要用到的urlopen和read方法在我的python版本中,直接引用urllib會(huì )出錯,所以一般使用這個(gè)import:import urllib.request
  提取網(wǎng)頁(yè)源代碼的整個(gè)方法如下:
  import urllib.request
def get_html(httpUrl):
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
  我們可以將這個(gè)方法打包成一個(gè)py文件,然后直接在其他py文件中導入這個(gè)方法,然后直接使用我們寫(xiě)的get_html方法。
  然后將上面得到的二進(jìn)制文件解碼成普通字符串:
  html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
  4、提取圖片地址
  從網(wǎng)頁(yè)的源代碼中提取關(guān)鍵數據時(shí),實(shí)際上是字符串匹配。如果這樣估計C++累死我了,當然我也寫(xiě)過(guò)類(lèi)似的,甚至更復雜的,真的是痛苦的回憶。
  這里推薦一個(gè)比較簡(jiǎn)單的字符串搜索和匹配程序-正則表達式,也稱(chēng)為正則表達式。(英文:Regular Expression,在代碼中??s寫(xiě)為regex、regexp或RE)
  當然,如何使用正則表達式我就不多說(shuō)了。你可以自己搜索每個(gè)視頻網(wǎng)站,看個(gè)大概就夠了,或者直接看這里——正則表達式基礎
  了解正則表達式的基本邏輯就可以了。
  進(jìn)入正題,上面的步驟已經(jīng)分析到每張圖片的原創(chuàng )地址開(kāi)頭都有一個(gè)很簡(jiǎn)單的“objURL”,所以我們正則化的關(guān)鍵就是把“objURL”后面的地址取出來(lái)。這個(gè)很簡(jiǎn)單,我直接把寫(xiě)好的正則表達式拿出來(lái):
  reg=r&#39;"objURL":"(.*?)",&#39;
  ps:字符串前的r主要是為了防止轉義字符丟失導致的字符丟失
  這個(gè)規律的作用如下:
  匹配任何以 "objURL":" 開(kāi)頭并以 ", 結尾的字符串
  然后簡(jiǎn)單地編譯這個(gè)正則(記得導入 re 包):
  import re
reg=r&#39;"objURL":"(.*?)",&#39;
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
  然后使用上面編譯的正則表達式解析第三步得到的字符串,如下:
  pic_list = reg_compile.findall(html_str)
  上面的 pic_list 是一個(gè)簡(jiǎn)單的列表
  輸出列表中的數據:
   for pic in pic_list:
print(pic)
  輸出如下:
  http://b-ssl.duitang.com/uploa ... .jpeg
http://b-ssl.duitang.com/uploa ... .jpeg
http://cdnq.duitang.com/upload ... .jpeg
http://wxpic.7399.com/nqvaoZto ... cpNpu
http://i1.hdslb.com/bfs/archiv ... 0.jpg
http://wxpic.7399.com/nqvaoZto ... cpNpu
  可以清楚的看到,有些地址不是圖片地址。這可以說(shuō)是我正則化的問(wèn)題,但也無(wú)傷大雅(其實(shí)我也懶得改了)。一點(diǎn)判斷就可以完美解決(由于所有圖片地址都以g結尾,比如png、jpg、jpeg^_^)
  for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
  完美解,w(?Д?)w
  ps:哈哈哈,這里當然是玩笑了,大家記得想好辦法改正,算是小測試,畢竟真的是無(wú)害的。
  5、下載圖片
  下載圖片也很簡(jiǎn)單。正如我開(kāi)頭所說(shuō)的,圖片實(shí)際上是存在于遠程服務(wù)器上的圖片文件。只要服務(wù)器允許,我們可以很容易的通過(guò)GET請求得到這張圖片。畢竟,瀏覽器也會(huì )這樣做。,至于你得到的,沒(méi)人管它是用來(lái)實(shí)際填網(wǎng)頁(yè)還是給自己用。
  python中下載圖片的方式有很多種,如下三種
 ?。ㄒ韵麓a不是我寫(xiě)的,不知道版本對不對,如有錯誤請自行百度。第一種在我的版本中沒(méi)有問(wèn)題):
  def urllib_download(url):
from urllib.request import urlretrieve
urlretrieve(url, &#39;1.png&#39;)

def request_download(url):
import requests
r = requests.get(url)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
f.write(r.content)

def chunk_download(url):
import requests
r = requests.get(url, stream=True)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)

  所以我們只需要下載上面列表中的每個(gè)圖片網(wǎng)址。我選擇了上面的第一個(gè)。這是urllib.request中存在的一個(gè)方法,定義如下:
  urllib.request.urlretrieve(url, filename, reporthook, data)
參數說(shuō)明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數,urllib會(huì )生成一個(gè)臨時(shí)文件來(lái)保存數據);
reporthook:是一個(gè)回調函數,當連接上服務(wù)器、以及相應的數據塊傳輸完畢的時(shí)候會(huì )觸發(fā)該回調。我們可以利用這個(gè)回調函數來(lái)顯示當前的下載進(jìn)度。
data:指post到服務(wù)器的數據。該方法返回一個(gè)包含兩個(gè)元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應頭。
  然后一個(gè)簡(jiǎn)單的循環(huán)下載就可以了:
  def download_pic(pic_adr,x):
urllib.request.urlretrieve(pic_adr, &#39;%s.jpg&#39; %x)
# &#39;./images/%s.jpg&#39;,這里也可以自己選擇創(chuàng )建一個(gè)文件吧所有圖片放進(jìn)去,而不是直接放在當前目錄下

x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
download_pic(pic,x)
x += 1
  當然需要為每張圖片選擇一個(gè)本地名稱(chēng),只需將名稱(chēng)增加1234即可。
  這樣,我們就結束了整個(gè)爬取過(guò)程。執行后效果如下:
  
  可以看到,效果還是不錯的。畢竟,只要把它放在那里,讓它自己下載。還可以考慮如何翻頁(yè)的效果。事實(shí)上,這很簡(jiǎn)單。我就講實(shí)現一個(gè)變化。關(guān)鍵詞的效果提醒大家(其實(shí)是因為我有點(diǎn)懶,不想寫(xiě)了)
  6、更改搜索關(guān)鍵詞
  看百度搜索頁(yè)面的網(wǎng)址:
  
  觀(guān)察這個(gè)網(wǎng)址,我們很容易發(fā)現原來(lái)最后一個(gè)關(guān)鍵字是關(guān)鍵詞。復制就改了,但是復制之后就不簡(jiǎn)單了:
  http://image.baidu.com/search/ ... %25A5
  為什么word變成%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
  這么一堆東西?
  很簡(jiǎn)單,因為url是ASCII碼,而這里我們用的是中文,只要稍微操作一下就可以轉:
  keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
  urllib.parse.quote 是解碼后的代碼,在最后加上關(guān)鍵字就OK了。
  簡(jiǎn)單,這個(gè)簡(jiǎn)單的python爬蟲(chóng)就完成了。.
  雖然還是想自己寫(xiě)字符串識別,但是regular真的好用。建議多學(xué)習一些常規的騷技能。
  就這樣。
  如需修改,請自行復制完整代碼并進(jìn)行更改。下載多個(gè)頁(yè)面也是很簡(jiǎn)單的操作,就不多說(shuō)了,還是可以加多線(xiàn)程,代理,動(dòng)態(tài)ip。無(wú)論如何,這就是我的第一個(gè)爬蟲(chóng)。
  完整源碼(百度圖片爬蟲(chóng))
  import urllib
import time
from urllib.request import urlretrieve
import re
import urllib.request
def get_html(httpUrl):#獲取網(wǎng)頁(yè)源碼
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
def get_keyword_urllist(keyword):#爬取當前關(guān)鍵詞下的圖片地址
keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
pic_list = reg_compile.findall(html_str)
return pic_list
keyword="栗山未來(lái)"#自己修改,或者自己寫(xiě)個(gè)input或者一個(gè)txt自己讀就完事了,甚至你寫(xiě)一個(gè)配置表,把爬取數量、爬取關(guān)鍵詞、爬取圖片大小都寫(xiě)好都可以
pic_list=get_keyword_urllist(keyword)
x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
name = keyword+str(x)
time.sleep(0.01)
urllib.request.urlretrieve(pic, &#39;./images/%s.jpg&#39; %name)
x += 1

  如果不行,請檢查收錄的模板是否正確或版本是否正確。
  重點(diǎn)
  最后運行上面的源碼,應該會(huì )發(fā)現雖然可以下載,但是下載速度太慢了。解決它需要幾秒鐘,但如果它更慢,則可能需要十秒鐘以上。
  針對這種情況,我重寫(xiě)了上面的代碼,加入了多線(xiàn)程處理,將爬取時(shí)間縮短到1s以?xún)?。我是直接上傳到我的github上的,大家可以自己下載。
  快速爬取百度圖片-爬蟲(chóng)1.0版

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-19 20:02 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)
  對于網(wǎng)站webmaster來(lái)說(shuō),反爬蟲(chóng)是一項非常重要的工作——沒(méi)有人想讓爬蟲(chóng)占據超過(guò)一半的寬帶
  只有百度爬蟲(chóng)是個(gè)例外。對于站長(cháng)來(lái)說(shuō),一篇文章文章被百度收錄證明得越快,其優(yōu)化效果就越顯著(zhù)
  那么百度爬蟲(chóng)的捕獲規則是什么呢?讓我們今天來(lái)看看
  
  一、高質(zhì)量連續內容更新
  用戶(hù)和百度爬蟲(chóng)都對枯燥的內容非常感興趣,能夠持續更新并確保更新內容質(zhì)量的網(wǎng)站當然比那些多年不更新或更新原創(chuàng )內容的網(wǎng)站更具吸引力
  二、高質(zhì)量外鏈
  這是網(wǎng)站提高排名的重要一步。對于百度來(lái)說(shuō),大流量網(wǎng)站的權重必須高于小流量網(wǎng)站的權重。如果我們的網(wǎng)站外鏈是一個(gè)流量大的門(mén)戶(hù)網(wǎng)站網(wǎng)站的話(huà),通常這個(gè)門(mén)戶(hù)網(wǎng)站網(wǎng)站在百度也會(huì )有很高的權重,也就是說(shuō),它間接提高了我們自己的網(wǎng)站曝光率,增加了百度爬蟲(chóng)抓取其網(wǎng)站內容的可能性
  三、優(yōu)質(zhì)內鏈
  在構建爬蟲(chóng)捕獲矩陣(或“Web”)時(shí),除了延伸的高質(zhì)量外鏈,我們網(wǎng)站內鏈的質(zhì)量也決定了百度爬蟲(chóng)收錄的可能性和速度@文章. 百度爬蟲(chóng)將跟隨網(wǎng)站導航和網(wǎng)站內頁(yè)錨文本連接進(jìn)入網(wǎng)站內頁(yè)。簡(jiǎn)明的導航允許爬蟲(chóng)更快地找到內部頁(yè)面的錨文本。這樣,百度不僅可以接收目標頁(yè)面的內容,還可以收錄接收路徑上的所有頁(yè)面
  四、高品質(zhì)網(wǎng)站空間
  這里的“高質(zhì)量”不僅在于網(wǎng)站空間的穩定性,還在于網(wǎng)站空間足夠大,可以讓百度爬蟲(chóng)自由進(jìn)出。如果百度收錄a文章of網(wǎng)站吸引了大量流量,但大量前來(lái)訪(fǎng)問(wèn)網(wǎng)站的用戶(hù)由于網(wǎng)站空間不足而無(wú)法打開(kāi)網(wǎng)頁(yè),甚至無(wú)法打開(kāi)百度爬蟲(chóng),無(wú)疑會(huì )降低百度對該網(wǎng)站的權重分布@ 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)
  對于網(wǎng)站webmaster來(lái)說(shuō),反爬蟲(chóng)是一項非常重要的工作——沒(méi)有人想讓爬蟲(chóng)占據超過(guò)一半的寬帶
  只有百度爬蟲(chóng)是個(gè)例外。對于站長(cháng)來(lái)說(shuō),一篇文章文章被百度收錄證明得越快,其優(yōu)化效果就越顯著(zhù)
  那么百度爬蟲(chóng)的捕獲規則是什么呢?讓我們今天來(lái)看看
  
  一、高質(zhì)量連續內容更新
  用戶(hù)和百度爬蟲(chóng)都對枯燥的內容非常感興趣,能夠持續更新并確保更新內容質(zhì)量的網(wǎng)站當然比那些多年不更新或更新原創(chuàng )內容的網(wǎng)站更具吸引力
  二、高質(zhì)量外鏈
  這是網(wǎng)站提高排名的重要一步。對于百度來(lái)說(shuō),大流量網(wǎng)站的權重必須高于小流量網(wǎng)站的權重。如果我們的網(wǎng)站外鏈是一個(gè)流量大的門(mén)戶(hù)網(wǎng)站網(wǎng)站的話(huà),通常這個(gè)門(mén)戶(hù)網(wǎng)站網(wǎng)站在百度也會(huì )有很高的權重,也就是說(shuō),它間接提高了我們自己的網(wǎng)站曝光率,增加了百度爬蟲(chóng)抓取其網(wǎng)站內容的可能性
  三、優(yōu)質(zhì)內鏈
  在構建爬蟲(chóng)捕獲矩陣(或“Web”)時(shí),除了延伸的高質(zhì)量外鏈,我們網(wǎng)站內鏈的質(zhì)量也決定了百度爬蟲(chóng)收錄的可能性和速度@文章. 百度爬蟲(chóng)將跟隨網(wǎng)站導航和網(wǎng)站內頁(yè)錨文本連接進(jìn)入網(wǎng)站內頁(yè)。簡(jiǎn)明的導航允許爬蟲(chóng)更快地找到內部頁(yè)面的錨文本。這樣,百度不僅可以接收目標頁(yè)面的內容,還可以收錄接收路徑上的所有頁(yè)面
  四、高品質(zhì)網(wǎng)站空間
  這里的“高質(zhì)量”不僅在于網(wǎng)站空間的穩定性,還在于網(wǎng)站空間足夠大,可以讓百度爬蟲(chóng)自由進(jìn)出。如果百度收錄a文章of網(wǎng)站吸引了大量流量,但大量前來(lái)訪(fǎng)問(wèn)網(wǎng)站的用戶(hù)由于網(wǎng)站空間不足而無(wú)法打開(kāi)網(wǎng)頁(yè),甚至無(wú)法打開(kāi)百度爬蟲(chóng),無(wú)疑會(huì )降低百度對該網(wǎng)站的權重分布@

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-09-19 19:26 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)
  
  1.什么是爬行動(dòng)物
  爬蟲(chóng),也被稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng),是一個(gè)自動(dòng)程序或腳本運行在互聯(lián)網(wǎng)上獲取數據
  2.爬行動(dòng)物解決了什么問(wèn)題
  爬蟲(chóng)解決了獲取數據的問(wèn)題
  3.crawler抓取的數據有什么用途
  結合搜索引擎,對數據進(jìn)行分析,提取有價(jià)值的信息,得到數據的商業(yè)價(jià)值
  4.爬行動(dòng)物的簡(jiǎn)單分類(lèi)
  通用爬蟲(chóng):百度抓取互聯(lián)網(wǎng)上所有數據的爬蟲(chóng)稱(chēng)為通用爬蟲(chóng)
  垂直爬蟲(chóng):為數據分析而爬蟲(chóng)特定數據的爬蟲(chóng)稱(chēng)為垂直爬蟲(chóng)
  摘要:在互聯(lián)網(wǎng)上,大多數都是垂直爬蟲(chóng),也就是說(shuō),通過(guò)值爬蟲(chóng)來(lái)獲取一定范圍內的數據
  
  首先,以百度主頁(yè)為例,通過(guò)HTTP get獲取百度主頁(yè)的內容
  
  
  
  百度頁(yè)面源代碼
  臨時(shí)要求:
  獲取百度徽標中的大熊爪圖片鏈接
  一.enclosure-get方法
  
  
  
  經(jīng)營(yíng)成果:
  index.html
  是的,這是我們的第一個(gè)常規代碼
  通過(guò)這種方式,捕獲圖片的鏈接必須很方便
  我們將常規匹配封裝到一個(gè)函數中,然后修改代碼如下:
  
  
  只要抓住SRC=“XXXXXX”字符串,就可以抓住整個(gè)SRC鏈接,因此可以使用一個(gè)簡(jiǎn)單的正則語(yǔ)句:SRC=\“(.+?)\”
  完整代碼如下:
  
  
  “我們相信,每個(gè)人都可以成為java開(kāi)發(fā)的偉大之神。從現在開(kāi)始,找一位師兄來(lái)介紹你。在學(xué)習的過(guò)程中,你將不再迷茫。這是java開(kāi)發(fā)學(xué)院,初學(xué)者可以在這里轉行到互聯(lián)網(wǎng)行業(yè)?!?br />   "我是一名從事開(kāi)發(fā)多年的老java程序員。我辭職了,目前正在學(xué)習自己的java私人定制課程。今年年初,我花了一個(gè)月的時(shí)間整理了一個(gè)最適合2019年學(xué)習的java learning dry產(chǎn)品。我整理了從最基本的javase到spring等各種框架給每個(gè)Java合作伙伴。如果你想得到它,你可以關(guān)注我的頭條新聞,并在給我的私人信件中發(fā)布:Java,你可以免費得到它 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)
  
  1.什么是爬行動(dòng)物
  爬蟲(chóng),也被稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng),是一個(gè)自動(dòng)程序或腳本運行在互聯(lián)網(wǎng)上獲取數據
  2.爬行動(dòng)物解決了什么問(wèn)題
  爬蟲(chóng)解決了獲取數據的問(wèn)題
  3.crawler抓取的數據有什么用途
  結合搜索引擎,對數據進(jìn)行分析,提取有價(jià)值的信息,得到數據的商業(yè)價(jià)值
  4.爬行動(dòng)物的簡(jiǎn)單分類(lèi)
  通用爬蟲(chóng):百度抓取互聯(lián)網(wǎng)上所有數據的爬蟲(chóng)稱(chēng)為通用爬蟲(chóng)
  垂直爬蟲(chóng):為數據分析而爬蟲(chóng)特定數據的爬蟲(chóng)稱(chēng)為垂直爬蟲(chóng)
  摘要:在互聯(lián)網(wǎng)上,大多數都是垂直爬蟲(chóng),也就是說(shuō),通過(guò)值爬蟲(chóng)來(lái)獲取一定范圍內的數據
  
  首先,以百度主頁(yè)為例,通過(guò)HTTP get獲取百度主頁(yè)的內容
  
  
  
  百度頁(yè)面源代碼
  臨時(shí)要求:
  獲取百度徽標中的大熊爪圖片鏈接
  一.enclosure-get方法
  
  
  
  經(jīng)營(yíng)成果:
  index.html
  是的,這是我們的第一個(gè)常規代碼
  通過(guò)這種方式,捕獲圖片的鏈接必須很方便
  我們將常規匹配封裝到一個(gè)函數中,然后修改代碼如下:
  
  
  只要抓住SRC=“XXXXXX”字符串,就可以抓住整個(gè)SRC鏈接,因此可以使用一個(gè)簡(jiǎn)單的正則語(yǔ)句:SRC=\“(.+?)\”
  完整代碼如下:
  
  
  “我們相信,每個(gè)人都可以成為java開(kāi)發(fā)的偉大之神。從現在開(kāi)始,找一位師兄來(lái)介紹你。在學(xué)習的過(guò)程中,你將不再迷茫。這是java開(kāi)發(fā)學(xué)院,初學(xué)者可以在這里轉行到互聯(lián)網(wǎng)行業(yè)?!?br />   "我是一名從事開(kāi)發(fā)多年的老java程序員。我辭職了,目前正在學(xué)習自己的java私人定制課程。今年年初,我花了一個(gè)月的時(shí)間整理了一個(gè)最適合2019年學(xué)習的java learning dry產(chǎn)品。我整理了從最基本的javase到spring等各種框架給每個(gè)Java合作伙伴。如果你想得到它,你可以關(guān)注我的頭條新聞,并在給我的私人信件中發(fā)布:Java,你可以免費得到它

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生) )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2021-09-17 19:09 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
  Python項目中的爬蟲(chóng)應用案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生、夏雅捷主編)-抓拍百度圖片
  本文使用請求庫對網(wǎng)站圖片進(jìn)行爬網(wǎng)。前幾章中的博客介紹了如何使用urllib庫抓取網(wǎng)頁(yè)。本文主要利用請求庫對網(wǎng)頁(yè)內容進(jìn)行抓取。使用方法基本相同,但請求方法相對簡(jiǎn)單
  不要忘記爬行動(dòng)物的基本概念:
  1.指定要抓取的鏈接,然后抓取網(wǎng)站源代碼
  2.提取您想要的內容。例如,如果要對圖像信息進(jìn)行爬網(wǎng),可以選擇使用正則表達式過(guò)濾或使用提取
  標記法
  3.cycle獲取要爬網(wǎng)的內容列表并保存文件
  這里的代碼與我的博客(photo crawler series一))前幾章的區別在于:
  1.提取網(wǎng)頁(yè)使用請求庫
  2.保存圖片時(shí),后綴不是PNG或JPG,而是圖片本身的后綴
  3.不使用urllib.request.urlretrieve函數保存圖片,而是使用文件讀寫(xiě)操作保存圖片
  具體代碼如下圖所示:
  # 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { &#39;User-Agent&#39;: &#39;MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0&#39; } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = &#39;UTF-8&#39; # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, &#39;html.parser&#39;) # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all(&#39;img&#39;) x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get(&#39;src&#39;) # 排除 src=&#39;&#39; 的情況 if imgUrl_src != &#39;&#39;: print(&#39;正在下載第 %d : %s 張圖片&#39; % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = &#39;https://www.hqu.edu.cn/&#39; + imgUrl_src print(&#39;正在下載:%s&#39; % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 &#39;.jpg&#39; p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, &#39;wb&#39;).write(ir.content) x = x + 1 except: continueif __name__ == &#39;__main__&#39;: # 指定爬取圖片鏈接 url = &#39;https://www.hqu.edu.cn/index.htm&#39; # 指定存儲圖片路徑 localPath = &#39;./img/&#39; # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
  請注意,為什么在開(kāi)始時(shí)判斷圖片鏈接是否來(lái)自“HTTPS://”,主要是因為我們需要完整的絕對路徑來(lái)下載圖片,并且我們需要查看原創(chuàng )網(wǎng)頁(yè)代碼。選擇圖片,點(diǎn)擊html所在的代碼,按住鼠標查看絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖所示:
   查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
  Python項目中的爬蟲(chóng)應用案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生、夏雅捷主編)-抓拍百度圖片
  本文使用請求庫對網(wǎng)站圖片進(jìn)行爬網(wǎng)。前幾章中的博客介紹了如何使用urllib庫抓取網(wǎng)頁(yè)。本文主要利用請求庫對網(wǎng)頁(yè)內容進(jìn)行抓取。使用方法基本相同,但請求方法相對簡(jiǎn)單
  不要忘記爬行動(dòng)物的基本概念:
  1.指定要抓取的鏈接,然后抓取網(wǎng)站源代碼
  2.提取您想要的內容。例如,如果要對圖像信息進(jìn)行爬網(wǎng),可以選擇使用正則表達式過(guò)濾或使用提取
  標記法
  3.cycle獲取要爬網(wǎng)的內容列表并保存文件
  這里的代碼與我的博客(photo crawler series一))前幾章的區別在于:
  1.提取網(wǎng)頁(yè)使用請求庫
  2.保存圖片時(shí),后綴不是PNG或JPG,而是圖片本身的后綴
  3.不使用urllib.request.urlretrieve函數保存圖片,而是使用文件讀寫(xiě)操作保存圖片
  具體代碼如下圖所示:
  # 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { &#39;User-Agent&#39;: &#39;MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0&#39; } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = &#39;UTF-8&#39; # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, &#39;html.parser&#39;) # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all(&#39;img&#39;) x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get(&#39;src&#39;) # 排除 src=&#39;&#39; 的情況 if imgUrl_src != &#39;&#39;: print(&#39;正在下載第 %d : %s 張圖片&#39; % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = &#39;https://www.hqu.edu.cn/&#39; + imgUrl_src print(&#39;正在下載:%s&#39; % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 &#39;.jpg&#39; p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, &#39;wb&#39;).write(ir.content) x = x + 1 except: continueif __name__ == &#39;__main__&#39;: # 指定爬取圖片鏈接 url = &#39;https://www.hqu.edu.cn/index.htm&#39; # 指定存儲圖片路徑 localPath = &#39;./img/&#39; # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
  請注意,為什么在開(kāi)始時(shí)判斷圖片鏈接是否來(lái)自“HTTPS://”,主要是因為我們需要完整的絕對路徑來(lái)下載圖片,并且我們需要查看原創(chuàng )網(wǎng)頁(yè)代碼。選擇圖片,點(diǎn)擊html所在的代碼,按住鼠標查看絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖所示:
  

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期 )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 98 次瀏覽 ? 2021-09-17 19:06 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期
)
  在百度熱點(diǎn)新聞中,前6條在strong>A下抓取,后30條在各子欄目(國內、國際、本地、娛樂(lè )、體育等)下抓取,抓取的特征值為標簽下的mon值,C=欄目名稱(chēng),PN=各欄目下的新聞條數,12個(gè)項目顯示在一個(gè)類(lèi)別下(8個(gè)本地新聞項目),只需查看原創(chuàng )網(wǎng)頁(yè)即可
  完整代碼如下所示
  import requests
from bs4 import BeautifulSoup
import time
url=&#39;http://news.baidu.com/&#39;
res=requests.get(url)
soup = BeautifulSoup(res.text,&#39;lxml&#39;)
print(&#39;百度新聞python爬蟲(chóng)抓取&#39;)
print(&#39;頭條熱點(diǎn)新聞&#39;)
sel_a =soup.select(&#39;strong a&#39;)
for i in range(0,5):
print(sel_a[i].get_text())
print(sel_a[i].get(&#39;href&#39;))
print(&#39;熱點(diǎn)新聞&#39;)
titles_b=[]
titlew=""
for i in range(1,31):
sel_b=soup.find_all(&#39;a&#39;,mon="ct=1&a=2&c=top&pn="+str(i))
titles_b.append(sel_b[0])
for i in range(0,30):
print(titles_b[i].get_text())
print(titles_b[i].get(&#39;href&#39;))
titlew=titlew + titles_b[i].get_text() + "\n"
# 獲取當前時(shí)間
now = time.strftime(&#39;%Y-%m-%d&#39;, time.localtime(time.time()))
# 輸出到文件
with open(&#39;news&#39; + now + &#39;.txt&#39;, &#39;a&#39;, encoding=&#39;utf-8&#39;) as file:
file.write(titlew) #只輸出標題
  在瀏覽過(guò)程中,您可以直接將網(wǎng)頁(yè)下載到本地進(jìn)行調試。代碼如下:
  with open(&#39;本地文件路徑&#39;,encoding=&#39;utf-8&#39;) as f:
# print(f.read())
soup = BeautifulSoup(f,&#39;lxml&#39;) 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期
)
  在百度熱點(diǎn)新聞中,前6條在strong>A下抓取,后30條在各子欄目(國內、國際、本地、娛樂(lè )、體育等)下抓取,抓取的特征值為標簽下的mon值,C=欄目名稱(chēng),PN=各欄目下的新聞條數,12個(gè)項目顯示在一個(gè)類(lèi)別下(8個(gè)本地新聞項目),只需查看原創(chuàng )網(wǎng)頁(yè)即可
  完整代碼如下所示
  import requests
from bs4 import BeautifulSoup
import time
url=&#39;http://news.baidu.com/&#39;
res=requests.get(url)
soup = BeautifulSoup(res.text,&#39;lxml&#39;)
print(&#39;百度新聞python爬蟲(chóng)抓取&#39;)
print(&#39;頭條熱點(diǎn)新聞&#39;)
sel_a =soup.select(&#39;strong a&#39;)
for i in range(0,5):
print(sel_a[i].get_text())
print(sel_a[i].get(&#39;href&#39;))
print(&#39;熱點(diǎn)新聞&#39;)
titles_b=[]
titlew=""
for i in range(1,31):
sel_b=soup.find_all(&#39;a&#39;,mon="ct=1&a=2&c=top&pn="+str(i))
titles_b.append(sel_b[0])
for i in range(0,30):
print(titles_b[i].get_text())
print(titles_b[i].get(&#39;href&#39;))
titlew=titlew + titles_b[i].get_text() + "\n"
# 獲取當前時(shí)間
now = time.strftime(&#39;%Y-%m-%d&#39;, time.localtime(time.time()))
# 輸出到文件
with open(&#39;news&#39; + now + &#39;.txt&#39;, &#39;a&#39;, encoding=&#39;utf-8&#39;) as file:
file.write(titlew) #只輸出標題
  在瀏覽過(guò)程中,您可以直接將網(wǎng)頁(yè)下載到本地進(jìn)行調試。代碼如下:
  with open(&#39;本地文件路徑&#39;,encoding=&#39;utf-8&#39;) as f:
# print(f.read())
soup = BeautifulSoup(f,&#39;lxml&#39;)

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2021-09-17 12:14 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)
  根據老師的指導,我昨天開(kāi)始自學(xué)爬蟲(chóng)入門(mén)
  雖然我意識到了一個(gè)相對簡(jiǎn)單的小爬蟲(chóng),但我還是很興奮。我真的很高興第一次意識到這一點(diǎn)
  起初,我想爬上pexel的墻紙,但我發(fā)現對方的網(wǎng)頁(yè)不知道設置了什么。無(wú)論如何,有一個(gè)反爬蟲(chóng)機制,我使用Python直接訪(fǎng)問(wèn)fobbiden!多么小氣的qwq
  最后,我爬上了ZOL的墻紙
  之前:
  當設計一個(gè)爬蟲(chóng)項目時(shí),我們應該首先闡明手動(dòng)瀏覽頁(yè)面以獲取大腦中圖片的步驟
  一般來(lái)說(shuō),當我們批量在線(xiàn)打開(kāi)壁紙時(shí),一般操作如下:
  1、打開(kāi)墻紙頁(yè)
  2、單擊墻紙貼圖(打開(kāi)指定墻紙的頁(yè)面)
  3、選擇分辨率(我們想下載高清圖片)
  4、save圖片
  在實(shí)際操作中,我們實(shí)現了以下步驟來(lái)訪(fǎng)問(wèn)網(wǎng)頁(yè)地址:打開(kāi)網(wǎng)頁(yè)的壁紙→ 單擊墻紙貼圖打開(kāi)指定頁(yè)面→ 選擇分辨率,單擊打開(kāi)最終保存的目標圖像的網(wǎng)頁(yè)→ 保存圖像
  在抓取過(guò)程中,我們嘗試通過(guò)模擬瀏覽器的操作來(lái)打開(kāi)網(wǎng)頁(yè),一步一步地獲取并訪(fǎng)問(wèn)網(wǎng)頁(yè),最后獲取目標圖像的下載地址,將圖像下載并保存到指定路徑
  *為了在這些中間過(guò)程中構建網(wǎng)頁(yè)的某些特定過(guò)濾條件,有必要打開(kāi)指定頁(yè)面的源代碼,觀(guān)察并找到收錄有目的鏈接的標記
  具體實(shí)施項目和說(shuō)明
  這里我只是想得到一些指定的圖片,所以我首先搜索了“昌門(mén)有喜”的網(wǎng)頁(yè),打開(kāi)了一個(gè)搜索結果頁(yè)面,發(fā)現這個(gè)頁(yè)面上還收錄了其他相同類(lèi)型的壁紙鏈接,所以我從一開(kāi)始就將我第一次訪(fǎng)問(wèn)的目的地地址設置為這個(gè)搜索結果頁(yè)面
  目標結果頁(yè)面的屏幕截圖:
  
  圖中的下標為“1/29”和“2/29”是相同類(lèi)型的其他目標壁紙。通過(guò)單擊這些圖片,我們可以打開(kāi)一個(gè)新的目標下載圖片頁(yè)面
  這里我們看一下網(wǎng)頁(yè)的源代碼
  
  圖的黃色底部是這些類(lèi)似墻紙的目標地址(訪(fǎng)問(wèn)時(shí)需要添加前綴“”)
  現在我們可以嘗試實(shí)現構建爬蟲(chóng)程序:
  打開(kāi)指定的頁(yè)面→ 過(guò)濾并獲取所有昌門(mén)優(yōu)喜壁紙的目標下載頁(yè)面鏈接
  代碼如下:
   1 from urllib import request,error
2 import re
3
4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
5
6 try:
7 response = request.urlopen(url)# 打開(kāi)頁(yè)面
8 html = response.read() #此時(shí)是byte類(lèi)型
9 html = str(html) # 轉換成字符串
10
11 pattern = re.compile(r'.*?</a>')
12 imglist = re.findall(pattern,html) # 匹配<a>標簽中的href地址
13 truelist = []
14 for item in imglist:
15 if re.match(r'^\/bizhi\/561_',item): # 觀(guān)察到所有目的地址下載頁(yè)面前綴都是/bizhi/561_,通過(guò)match函數進(jìn)行篩選
16 truelist.append(item)# 篩選掉其他無(wú)關(guān)的頁(yè)面(把真的目標頁(yè)面加到truelist列表中)
17 except error.HTTPError as e:
18 print(e.reason)
19 except error.URLError as e:
20 print(e.reason)
21 except:
22 pass
  在獲得地址后,我們可以獲得地址→ 打開(kāi)指定的頁(yè)面→ 選擇分辨率→ 獲取目標下載地址→ 保存到本地指定路徑
  在測試期間,我輸出了在信任列表的前一步中保存的內容
  
  您可以看到只保存了一個(gè)后綴。我們需要在訪(fǎng)問(wèn)時(shí)添加指定的前綴
  實(shí)施代碼(見(jiàn)***代碼):
<p> 1 # 對于每一張地址,抓取其地址并且下載到本地
2 x=0
3 for wallpaperpage in truelist:
4 try:
5 # print(wallpaperpage)
6 url1 = "http://desk.zol.com.cn" + wallpaperpage
7 response1 = request.urlopen(url1) # 打開(kāi)壁紙的頁(yè)面,相當于在瀏覽器中單擊壁紙名
8 html1 = response1.read()
9 html1 = str(html1)
10 pattern1 = re.compile(r'.*</a>')
11 urllist = re.findall(pattern1,html1) #匹配<a>標簽中的id為1920 * 1080的地址,相當于在瀏覽器中選擇1920*1080分辨率
12 html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打開(kāi)網(wǎng)頁(yè)
13
14 pattern2 = re.compile(r' 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)
  根據老師的指導,我昨天開(kāi)始自學(xué)爬蟲(chóng)入門(mén)
  雖然我意識到了一個(gè)相對簡(jiǎn)單的小爬蟲(chóng),但我還是很興奮。我真的很高興第一次意識到這一點(diǎn)
  起初,我想爬上pexel的墻紙,但我發(fā)現對方的網(wǎng)頁(yè)不知道設置了什么。無(wú)論如何,有一個(gè)反爬蟲(chóng)機制,我使用Python直接訪(fǎng)問(wèn)fobbiden!多么小氣的qwq
  最后,我爬上了ZOL的墻紙
  之前:
  當設計一個(gè)爬蟲(chóng)項目時(shí),我們應該首先闡明手動(dòng)瀏覽頁(yè)面以獲取大腦中圖片的步驟
  一般來(lái)說(shuō),當我們批量在線(xiàn)打開(kāi)壁紙時(shí),一般操作如下:
  1、打開(kāi)墻紙頁(yè)
  2、單擊墻紙貼圖(打開(kāi)指定墻紙的頁(yè)面)
  3、選擇分辨率(我們想下載高清圖片)
  4、save圖片
  在實(shí)際操作中,我們實(shí)現了以下步驟來(lái)訪(fǎng)問(wèn)網(wǎng)頁(yè)地址:打開(kāi)網(wǎng)頁(yè)的壁紙→ 單擊墻紙貼圖打開(kāi)指定頁(yè)面→ 選擇分辨率,單擊打開(kāi)最終保存的目標圖像的網(wǎng)頁(yè)→ 保存圖像
  在抓取過(guò)程中,我們嘗試通過(guò)模擬瀏覽器的操作來(lái)打開(kāi)網(wǎng)頁(yè),一步一步地獲取并訪(fǎng)問(wèn)網(wǎng)頁(yè),最后獲取目標圖像的下載地址,將圖像下載并保存到指定路徑
  *為了在這些中間過(guò)程中構建網(wǎng)頁(yè)的某些特定過(guò)濾條件,有必要打開(kāi)指定頁(yè)面的源代碼,觀(guān)察并找到收錄有目的鏈接的標記
  具體實(shí)施項目和說(shuō)明
  這里我只是想得到一些指定的圖片,所以我首先搜索了“昌門(mén)有喜”的網(wǎng)頁(yè),打開(kāi)了一個(gè)搜索結果頁(yè)面,發(fā)現這個(gè)頁(yè)面上還收錄了其他相同類(lèi)型的壁紙鏈接,所以我從一開(kāi)始就將我第一次訪(fǎng)問(wèn)的目的地地址設置為這個(gè)搜索結果頁(yè)面
  目標結果頁(yè)面的屏幕截圖:
  
  圖中的下標為“1/29”和“2/29”是相同類(lèi)型的其他目標壁紙。通過(guò)單擊這些圖片,我們可以打開(kāi)一個(gè)新的目標下載圖片頁(yè)面
  這里我們看一下網(wǎng)頁(yè)的源代碼
  
  圖的黃色底部是這些類(lèi)似墻紙的目標地址(訪(fǎng)問(wèn)時(shí)需要添加前綴“”)
  現在我們可以嘗試實(shí)現構建爬蟲(chóng)程序:
  打開(kāi)指定的頁(yè)面→ 過(guò)濾并獲取所有昌門(mén)優(yōu)喜壁紙的目標下載頁(yè)面鏈接
  代碼如下:
   1 from urllib import request,error
2 import re
3
4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
5
6 try:
7 response = request.urlopen(url)# 打開(kāi)頁(yè)面
8 html = response.read() #此時(shí)是byte類(lèi)型
9 html = str(html) # 轉換成字符串
10
11 pattern = re.compile(r'.*?</a>')
12 imglist = re.findall(pattern,html) # 匹配<a>標簽中的href地址
13 truelist = []
14 for item in imglist:
15 if re.match(r'^\/bizhi\/561_',item): # 觀(guān)察到所有目的地址下載頁(yè)面前綴都是/bizhi/561_,通過(guò)match函數進(jìn)行篩選
16 truelist.append(item)# 篩選掉其他無(wú)關(guān)的頁(yè)面(把真的目標頁(yè)面加到truelist列表中)
17 except error.HTTPError as e:
18 print(e.reason)
19 except error.URLError as e:
20 print(e.reason)
21 except:
22 pass
  在獲得地址后,我們可以獲得地址→ 打開(kāi)指定的頁(yè)面→ 選擇分辨率→ 獲取目標下載地址→ 保存到本地指定路徑
  在測試期間,我輸出了在信任列表的前一步中保存的內容
  
  您可以看到只保存了一個(gè)后綴。我們需要在訪(fǎng)問(wèn)時(shí)添加指定的前綴
  實(shí)施代碼(見(jiàn)***代碼):
<p> 1 # 對于每一張地址,抓取其地址并且下載到本地
2 x=0
3 for wallpaperpage in truelist:
4 try:
5 # print(wallpaperpage)
6 url1 = "http://desk.zol.com.cn" + wallpaperpage
7 response1 = request.urlopen(url1) # 打開(kāi)壁紙的頁(yè)面,相當于在瀏覽器中單擊壁紙名
8 html1 = response1.read()
9 html1 = str(html1)
10 pattern1 = re.compile(r'.*</a>')
11 urllist = re.findall(pattern1,html1) #匹配<a>標簽中的id為1920 * 1080的地址,相當于在瀏覽器中選擇1920*1080分辨率
12 html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打開(kāi)網(wǎng)頁(yè)
13
14 pattern2 = re.compile(r'

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼 )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 105 次瀏覽 ? 2021-09-16 06:16 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼
)
  最近,我在互聯(lián)網(wǎng)上看到了文章爬蟲(chóng)的引入。我覺(jué)得很有趣。搬家總比搬家好。晚上回來(lái)的時(shí)間只是用來(lái)編碼的~~
  網(wǎng)絡(luò )爬蟲(chóng):根據一定的規則對網(wǎng)頁(yè)上的信息進(jìn)行爬網(wǎng),通常先爬網(wǎng)到一些URL,然后將這些URL放入隊列中進(jìn)行反復搜索。我不知道是DFS還是BFS。我在這里不研究算法,因為爬蟲(chóng)示例相對簡(jiǎn)單。我實(shí)現了一個(gè)java小程序來(lái)抓取百度頁(yè)面的徽標
  事實(shí)上,爬蟲(chóng)的作用遠遠大于此。此示例僅供介紹性參考
  首先,讓我們分析一下,在本例中,抓取圖片的過(guò)程只不過(guò)是以下步驟:
  1.訪(fǎng)問(wèn)百度主頁(yè)獲取網(wǎng)頁(yè)返回的信息
  2.get有用信息(這里是網(wǎng)頁(yè)的源代碼或所有圖片的URL)
  3.訪(fǎng)問(wèn)所有圖片的URL
  4.可以以流的形式本地存儲
  通過(guò)以上步驟,很容易編寫(xiě)一個(gè)簡(jiǎn)單的爬蟲(chóng)程序。下面是代碼中帶有注釋的代碼
<p>import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Bug {
String url = "http://www.baidu.com";//待爬取的URL
//獲取url頁(yè)面的源碼;
public String ClimbBug() throws IOException{
URL accessurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) accessurl.openConnection();
conn.connect();//連接
InputStream is = null;
if(conn.getResponseCode()==200){//判斷狀態(tài)嗎是否為200,正常的話(huà)獲取返回信息
byte[] b=new byte[4096];
is = conn.getInputStream();
StringBuilder sb = new StringBuilder();
int len=0;
while((len=is.read(b))!=-1){
sb.append(new String(b,0,len,"UTF-8"));
}
return sb.toString();//返回百度頁(yè)面源代碼,這里跟網(wǎng)頁(yè)上右鍵查看源代碼的效果一致
}
return "Error";
}
//獲取圖片頁(yè)面URL
public List regex() throws IOException{
System.out.println(new Bug().ClimbBug());
String regex = "src[\\s\\S]*?>";//匹配所有圖片的URL
List list = new ArrayList();
Matcher p = Pattern.compile(regex).matcher(new Bug().ClimbBug());
while(p.find()){
list.add(p.group());
}//匹配到放入我們的URLlist
return list;
}
//下載圖片到本地或者結合數據庫做其他想做的操作;
public void download(List list) throws IOException{
InputStream is =null;
OutputStream os =null;
for (int i=0;i 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼
)
  最近,我在互聯(lián)網(wǎng)上看到了文章爬蟲(chóng)的引入。我覺(jué)得很有趣。搬家總比搬家好。晚上回來(lái)的時(shí)間只是用來(lái)編碼的~~
  網(wǎng)絡(luò )爬蟲(chóng):根據一定的規則對網(wǎng)頁(yè)上的信息進(jìn)行爬網(wǎng),通常先爬網(wǎng)到一些URL,然后將這些URL放入隊列中進(jìn)行反復搜索。我不知道是DFS還是BFS。我在這里不研究算法,因為爬蟲(chóng)示例相對簡(jiǎn)單。我實(shí)現了一個(gè)java小程序來(lái)抓取百度頁(yè)面的徽標
  事實(shí)上,爬蟲(chóng)的作用遠遠大于此。此示例僅供介紹性參考
  首先,讓我們分析一下,在本例中,抓取圖片的過(guò)程只不過(guò)是以下步驟:
  1.訪(fǎng)問(wèn)百度主頁(yè)獲取網(wǎng)頁(yè)返回的信息
  2.get有用信息(這里是網(wǎng)頁(yè)的源代碼或所有圖片的URL)
  3.訪(fǎng)問(wèn)所有圖片的URL
  4.可以以流的形式本地存儲
  通過(guò)以上步驟,很容易編寫(xiě)一個(gè)簡(jiǎn)單的爬蟲(chóng)程序。下面是代碼中帶有注釋的代碼
<p>import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Bug {
String url = "http://www.baidu.com";//待爬取的URL
//獲取url頁(yè)面的源碼;
public String ClimbBug() throws IOException{
URL accessurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) accessurl.openConnection();
conn.connect();//連接
InputStream is = null;
if(conn.getResponseCode()==200){//判斷狀態(tài)嗎是否為200,正常的話(huà)獲取返回信息
byte[] b=new byte[4096];
is = conn.getInputStream();
StringBuilder sb = new StringBuilder();
int len=0;
while((len=is.read(b))!=-1){
sb.append(new String(b,0,len,"UTF-8"));
}
return sb.toString();//返回百度頁(yè)面源代碼,這里跟網(wǎng)頁(yè)上右鍵查看源代碼的效果一致
}
return "Error";
}
//獲取圖片頁(yè)面URL
public List regex() throws IOException{
System.out.println(new Bug().ClimbBug());
String regex = "src[\\s\\S]*?>";//匹配所有圖片的URL
List list = new ArrayList();
Matcher p = Pattern.compile(regex).matcher(new Bug().ClimbBug());
while(p.find()){
list.add(p.group());
}//匹配到放入我們的URLlist
return list;
}
//下載圖片到本地或者結合數據庫做其他想做的操作;
public void download(List list) throws IOException{
InputStream is =null;
OutputStream os =null;
for (int i=0;i

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2021-09-16 06:14 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
  什么是爬行動(dòng)物
  網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在FOAF社區中更常被稱(chēng)為網(wǎng)絡(luò )追蹤器)是一種程序或腳本,根據特定規則自動(dòng)獲取萬(wàn)維網(wǎng)信息。其他不常用的名稱(chēng)包括螞蟻、自動(dòng)索引、模擬器或蠕蟲(chóng)。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)協(xié)議
  robots協(xié)議(也稱(chēng)為crawler協(xié)議、robot協(xié)議等)的全稱(chēng)為“robots exclusion protocol”,網(wǎng)站通過(guò)該協(xié)議,robots協(xié)議告訴搜索引擎哪些頁(yè)面可以爬網(wǎng),哪些頁(yè)面不能爬網(wǎng)
  robots.txt文件是一個(gè)文本文件。您可以使用任何通用文本編輯器(如Windows系統附帶的記事本)創(chuàng )建和編輯它。Robots.txt是一個(gè)協(xié)議,不是命令。Robots.txt是在搜索引擎中訪(fǎng)問(wèn)網(wǎng)站時(shí)查看的第一個(gè)文件。txt文件告訴爬行器可以在服務(wù)器上查看哪些文件。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)百度圖片
  目標:抓取百度圖片并保存在電腦上
  首先,數據是公開(kāi)的嗎?我可以下載嗎
  從圖中可以看出,百度圖片完全可以下載,說(shuō)明圖片可以爬網(wǎng)
  首先,了解圖片是什么
  我們看到的正式事物統稱(chēng)為圖片、照片、拓片等。圖形是技術(shù)制圖中的一個(gè)基本術(shù)語(yǔ),指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述事物的幾何特征、形狀、位置和大小的一種形式。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖像以數字形式存儲
  那照片在哪里
  映像保存在ECS數據庫中
  每張圖片都有一個(gè)對應的URL。請求通過(guò)請求模塊啟動(dòng),并以文件的WB+模式保存
  import requests
r = requests.get(&#x27;http://pic37.nipic.com/2014011 ... 23x27;)
with open(&#x27;demo.jpg&#x27;,&#x27;wb+&#x27;) as f:
f.write(r.content)
  但是任何編寫(xiě)代碼來(lái)爬升圖片的人都可以直接下載。爬蟲(chóng)的目的是實(shí)現批量下載的目的,這才是真正的爬蟲(chóng)
  首先,了解JSON
  JSON(JavaScript對象表示法)是一種輕量級數據交換格式。它基于ECMAScript(由歐洲計算機協(xié)會(huì )制定的JS規范)的子集,并使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔清晰的層次結構使JSON成為理想的數據交換語(yǔ)言
  JSON是JS的對象,用于訪(fǎng)問(wèn)數據
  JSON字符串
  {
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
  Python字典
  {
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
  但是在Python中,不能通過(guò)鍵值對直接獲取值,因此我必須討論Python中的字典
  在Python中導入JSON,并通過(guò)JSON將JSON數據轉換為Python數據(字典)。裝載量-->
  Ajax,即“異步JavaScript和XML”,是指一種用于創(chuàng )建交互式網(wǎng)頁(yè)應用程序的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
  圖片是通過(guò)Ajax方法加載的,也就是說(shuō),當我下拉時(shí),圖片會(huì )自動(dòng)加載,因為網(wǎng)站會(huì )自動(dòng)啟動(dòng)請求
  構造Ajax的URL請求,將JSON轉換成字典,通過(guò)字典的鍵值對得到圖片對應的URL
  import requests
import json
headers = {
&#x27;User-Agent&#x27;:&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
r = requests.get(&#x27;https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)[&#x27;data&#x27;]
for index,i in enumerate(res):
url = i[&#x27;hoverURL&#x27;]
print(url)
with open( &#x27;{}.jpg&#x27;.format(index),&#x27;wb+&#x27;) as f:
f.write(requests.get(url).content)
  一個(gè)JSON中有30張圖片,因此我們可以通過(guò)啟動(dòng)JSON請求來(lái)提升多達30張圖片,但這還不夠
  首先,分析在不同JSON中啟動(dòng)的請求
  https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
  事實(shí)上,可以發(fā)現,當請求再次啟動(dòng)時(shí),關(guān)鍵是PN不斷變化
  最后,封裝代碼。一個(gè)列表定義生產(chǎn)者來(lái)存儲不斷生成的圖片的URL,另一個(gè)列表定義消費者來(lái)保存圖片
  # -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
&#x27;User-Agent&#x27;: &#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
for i in range(num):
page_url = &#x27;https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290=&#x27;.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)[&#x27;data&#x27;]
if res:
print(res)
for j in res:
try:
url = j[&#x27;hoverURL&#x27;]
pic_url.append(url)
except:
print(&#x27;該圖片的url不存在&#x27;)
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists(&#x27;D:\圖片&#x27;):
pass
else:
os.makedirs(&#x27;D:\圖片&#x27;)
path = &#x27;D:\圖片\\&#x27;
for index,i in enumerate(pic_url):
filename = path + str(index) + &#x27;.jpg&#x27;
print(filename)
with open(filename, &#x27;wb+&#x27;) as f:
f.write(requests.get(i).content)
if __name__ == &#x27;__main__&#x27;:
num = int(input(&#x27;爬取幾次圖片:一次30張&#x27;))
down_img(num)
  爬行過(guò)程
  爬網(wǎng)結果
  文章開(kāi)始于: 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
  什么是爬行動(dòng)物
  網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在FOAF社區中更常被稱(chēng)為網(wǎng)絡(luò )追蹤器)是一種程序或腳本,根據特定規則自動(dòng)獲取萬(wàn)維網(wǎng)信息。其他不常用的名稱(chēng)包括螞蟻、自動(dòng)索引、模擬器或蠕蟲(chóng)。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)協(xié)議
  robots協(xié)議(也稱(chēng)為crawler協(xié)議、robot協(xié)議等)的全稱(chēng)為“robots exclusion protocol”,網(wǎng)站通過(guò)該協(xié)議,robots協(xié)議告訴搜索引擎哪些頁(yè)面可以爬網(wǎng),哪些頁(yè)面不能爬網(wǎng)
  robots.txt文件是一個(gè)文本文件。您可以使用任何通用文本編輯器(如Windows系統附帶的記事本)創(chuàng )建和編輯它。Robots.txt是一個(gè)協(xié)議,不是命令。Robots.txt是在搜索引擎中訪(fǎng)問(wèn)網(wǎng)站時(shí)查看的第一個(gè)文件。txt文件告訴爬行器可以在服務(wù)器上查看哪些文件。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)百度圖片
  目標:抓取百度圖片并保存在電腦上
  首先,數據是公開(kāi)的嗎?我可以下載嗎
  從圖中可以看出,百度圖片完全可以下載,說(shuō)明圖片可以爬網(wǎng)
  首先,了解圖片是什么
  我們看到的正式事物統稱(chēng)為圖片、照片、拓片等。圖形是技術(shù)制圖中的一個(gè)基本術(shù)語(yǔ),指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述事物的幾何特征、形狀、位置和大小的一種形式。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖像以數字形式存儲
  那照片在哪里
  映像保存在ECS數據庫中
  每張圖片都有一個(gè)對應的URL。請求通過(guò)請求模塊啟動(dòng),并以文件的WB+模式保存
  import requests
r = requests.get(&#x27;http://pic37.nipic.com/2014011 ... 23x27;)
with open(&#x27;demo.jpg&#x27;,&#x27;wb+&#x27;) as f:
f.write(r.content)
  但是任何編寫(xiě)代碼來(lái)爬升圖片的人都可以直接下載。爬蟲(chóng)的目的是實(shí)現批量下載的目的,這才是真正的爬蟲(chóng)
  首先,了解JSON
  JSON(JavaScript對象表示法)是一種輕量級數據交換格式。它基于ECMAScript(由歐洲計算機協(xié)會(huì )制定的JS規范)的子集,并使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔清晰的層次結構使JSON成為理想的數據交換語(yǔ)言
  JSON是JS的對象,用于訪(fǎng)問(wèn)數據
  JSON字符串
  {
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
  Python字典
  {
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
  但是在Python中,不能通過(guò)鍵值對直接獲取值,因此我必須討論Python中的字典
  在Python中導入JSON,并通過(guò)JSON將JSON數據轉換為Python數據(字典)。裝載量-->
  Ajax,即“異步JavaScript和XML”,是指一種用于創(chuàng )建交互式網(wǎng)頁(yè)應用程序的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
  圖片是通過(guò)Ajax方法加載的,也就是說(shuō),當我下拉時(shí),圖片會(huì )自動(dòng)加載,因為網(wǎng)站會(huì )自動(dòng)啟動(dòng)請求
  構造Ajax的URL請求,將JSON轉換成字典,通過(guò)字典的鍵值對得到圖片對應的URL
  import requests
import json
headers = {
&#x27;User-Agent&#x27;:&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
r = requests.get(&#x27;https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)[&#x27;data&#x27;]
for index,i in enumerate(res):
url = i[&#x27;hoverURL&#x27;]
print(url)
with open( &#x27;{}.jpg&#x27;.format(index),&#x27;wb+&#x27;) as f:
f.write(requests.get(url).content)
  一個(gè)JSON中有30張圖片,因此我們可以通過(guò)啟動(dòng)JSON請求來(lái)提升多達30張圖片,但這還不夠
  首先,分析在不同JSON中啟動(dòng)的請求
  https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
  事實(shí)上,可以發(fā)現,當請求再次啟動(dòng)時(shí),關(guān)鍵是PN不斷變化
  最后,封裝代碼。一個(gè)列表定義生產(chǎn)者來(lái)存儲不斷生成的圖片的URL,另一個(gè)列表定義消費者來(lái)保存圖片
  # -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
&#x27;User-Agent&#x27;: &#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
for i in range(num):
page_url = &#x27;https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290=&#x27;.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)[&#x27;data&#x27;]
if res:
print(res)
for j in res:
try:
url = j[&#x27;hoverURL&#x27;]
pic_url.append(url)
except:
print(&#x27;該圖片的url不存在&#x27;)
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists(&#x27;D:\圖片&#x27;):
pass
else:
os.makedirs(&#x27;D:\圖片&#x27;)
path = &#x27;D:\圖片\\&#x27;
for index,i in enumerate(pic_url):
filename = path + str(index) + &#x27;.jpg&#x27;
print(filename)
with open(filename, &#x27;wb+&#x27;) as f:
f.write(requests.get(i).content)
if __name__ == &#x27;__main__&#x27;:
num = int(input(&#x27;爬取幾次圖片:一次30張&#x27;))
down_img(num)
  爬行過(guò)程
  爬網(wǎng)結果
  文章開(kāi)始于:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( ,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-09-16 06:11 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)
  Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法
  更新時(shí)間:2015年7月24日09:36:05作者:fzhlee
  本文文章主要介紹了用Java-crawler捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法,并結合實(shí)例分析了Java-crawler的兩種實(shí)現技巧,具有一定的參考價(jià)值。有需要的朋友可以參考
  本文描述了在Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法。與您分享,供您參考。詳情如下:
  最近,我在用java學(xué)習爬行技術(shù)。哈哈,我進(jìn)門(mén)和你分享了我的經(jīng)歷
  提供以下兩種方法。一種是使用Apache提供的包。另一個(gè)是使用Java提供的包
  代碼如下:
<p>
// 第一種方法
//這種方法是用apache提供的包,簡(jiǎn)單方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 將表單的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是帶參數抓取,我自己把它注銷(xiāo)了.大家可以把注銷(xiāo)消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//這里要注意下 gb2312要和你抓取網(wǎng)頁(yè)的編碼要一樣
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉網(wǎng)頁(yè)中帶有html語(yǔ)言的標簽
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二種方法
// 這種方法是JAVA自帶的URL來(lái)抓取網(wǎng)站內容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 讀取結果網(wǎng)頁(yè)
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的額外數據
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 讀取內容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)
  Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法
  更新時(shí)間:2015年7月24日09:36:05作者:fzhlee
  本文文章主要介紹了用Java-crawler捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法,并結合實(shí)例分析了Java-crawler的兩種實(shí)現技巧,具有一定的參考價(jià)值。有需要的朋友可以參考
  本文描述了在Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法。與您分享,供您參考。詳情如下:
  最近,我在用java學(xué)習爬行技術(shù)。哈哈,我進(jìn)門(mén)和你分享了我的經(jīng)歷
  提供以下兩種方法。一種是使用Apache提供的包。另一個(gè)是使用Java提供的包
  代碼如下:
<p>
// 第一種方法
//這種方法是用apache提供的包,簡(jiǎn)單方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 將表單的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是帶參數抓取,我自己把它注銷(xiāo)了.大家可以把注銷(xiāo)消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//這里要注意下 gb2312要和你抓取網(wǎng)頁(yè)的編碼要一樣
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉網(wǎng)頁(yè)中帶有html語(yǔ)言的標簽
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二種方法
// 這種方法是JAVA自帶的URL來(lái)抓取網(wǎng)站內容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 讀取結果網(wǎng)頁(yè)
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的額外數據
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 讀取內容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2021-09-10 11:07 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助,也希望多多支持服務(wù)器之家!
  原文鏈接: 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助,也希望多多支持服務(wù)器之家!
  原文鏈接:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 2017年02月17日09:58:cong框架sublimetext3)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-10 11:06 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
2017年02月17日09:58:cong框架sublimetext3)
  Python爬蟲(chóng):通過(guò)關(guān)鍵詞抓取百度圖片
  更新時(shí)間:2017年2月17日09:58:19 作者:WC-cong
  本文主要介紹Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片的方法。有很好的參考價(jià)值,下面小編一起來(lái)看看吧
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助。同時(shí)也希望大家多多支持腳本之家! 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
2017年02月17日09:58:cong框架sublimetext3)
  Python爬蟲(chóng):通過(guò)關(guān)鍵詞抓取百度圖片
  更新時(shí)間:2017年2月17日09:58:19 作者:WC-cong
  本文主要介紹Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片的方法。有很好的參考價(jià)值,下面小編一起來(lái)看看吧
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助。同時(shí)也希望大家多多支持腳本之家!

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 149 次瀏覽 ? 2021-09-30 18:10 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)
  你還去網(wǎng)站搜什么圖?
  你還在尋找百度圖片等圖片素材網(wǎng)站嗎?
  今天給大家分享一個(gè)全新的圖片素材獲取方式。你想要的這里都有!
  是新浪微博!新一代的超級流量門(mén)戶(hù),甚至現在很多人都用它作為替代百度搜索的工具。以前是找杜娘找東西,現在是搜微博。
  比如某個(gè)宅男想看清純少女的照片,越多越好。他會(huì )這樣搜索:
  
  然后,他會(huì )逐頁(yè)閱讀和欣賞這些吸引眼球的圖片,并在遇到喜歡的人時(shí)將大圖片下載到本地保存。
  
  作為一個(gè)python程序員,我懶得像這樣一頁(yè)一頁(yè)地翻頁(yè)。喜歡全部下載下來(lái)慢慢欣賞,爆了硬盤(pán)!類(lèi)似于以下內容:
  
  這種簡(jiǎn)單的問(wèn)題讓我們?yōu)閜ythoner寫(xiě)爬蟲(chóng)那么容易,何樂(lè )而不為呢?讓我直接與你分享。
  分析目標網(wǎng)站
  微博的搜索結果是分頁(yè)的,所以我們的思路肯定是分頁(yè)處理,逐頁(yè)解析。
  我們先來(lái)看看搜索結果:
  
  我們點(diǎn)擊“搜索”按鈕后,很容易找到搜索請求。此處網(wǎng)頁(yè)顯示了第一頁(yè)的結果。
  然后我們點(diǎn)擊“Next”,我們可以發(fā)現請求變成了如下:
  
  細心的話(huà),可能一眼就發(fā)現在請求后多了一個(gè)page參數,指的是頁(yè)碼。這很容易。我們只需要改變頁(yè)碼就可以請求對應頁(yè)面的內容。
  由于此請求返回一個(gè) HTML 頁(yè)面,因此我們需要在此頁(yè)面上努力找到指向圖像的鏈接。我們隨便用頁(yè)面元素檢查來(lái)定位一張圖片,會(huì )看到如下效果:
  
  我們可以看到這個(gè)div里面的action-data是一個(gè)集合,下面li里面img的action-data是單張圖片的數據。
  接下來(lái),我們點(diǎn)擊“查看大圖”按鈕,瀏覽器會(huì )跳轉到一個(gè)新頁(yè)面,頁(yè)面內容為大圖。
  
  從請求的 URL 往下看,我發(fā)現了這個(gè):
  
  我把這個(gè)網(wǎng)址復制到瀏覽器請求中,發(fā)現這正是我們需要的大圖。我們也可以很容易的看到這個(gè)URL的特點(diǎn),就是最后我們在上面的action-data中添加了pic_id。
  這樣,我們的思路就很清晰了,下面是獲取一頁(yè)圖片的思路:
  獲取頁(yè)面內容;在頁(yè)面內容中找到圖片ID;拼接查看大圖的URL,請求獲取圖片;將圖像寫(xiě)入本地。代碼代碼
  思路很清晰,需要代碼code來(lái)驗證。由于代碼比較簡(jiǎn)單,我就一次性給大家展示一下。
  import requests
import re
import os
import time
cookie = {
&#39;Cookie&#39;: &#39;your cookie&#39;
}
header = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4144.2 Safari/537.36&#39;
}
get_order = input(&#39;是否啟動(dòng)程序? yes or no: &#39;)
number = 1
store_path = &#39;your path&#39;
while True:
if get_order != &#39;no&#39;:
print(&#39;抓取中......&#39;) # 下面的鏈接填寫(xiě)微博搜索的鏈接
url = f&#39;https://s.weibo.com/weibo%3Fq% ... ge%3D{number}&#39;
response = requests.get(url, cookies=cookie)
result = response.text
print(result)
detail = re.findall(&#39;data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">&#39;, result)
for part in detail:
uid = part[0]
mid = part[1]
pids = part[2]
for picid in pids.split(&#39;,&#39;):
url_x = f&#39;https://wx1.sinaimg.cn/large/%s.jpg&#39;%picid # 這里就是大圖鏈接了
response_photo = requests.get(url_x, headers=header)
file_name = url_x[-10:]
if not os.path.exists(store_path+uid):
os.mkdir(store_path+uid)
with open(store_path+uid + &#39;/&#39; + file_name, &#39;ab&#39;) as f: # 保存文件
f.write(response_photo.content)
time.sleep(0.5)
print(&#39;獲取完畢&#39;)
get_order = input(&#39;是否繼續獲取下一頁(yè)? Y:yes N:no: &#39;)
if get_order != &#39;no&#39;:
number += 1
else:
print(&#39;程序結束&#39;)
break
else:
print(&#39;程序結束&#39;)
break
  我這里采用了逐頁(yè)斷點(diǎn)的形式,方便調試。如果你想一次得到所有頁(yè)面的圖片,你可以把這些輸入判斷去掉,一次性全部運行。代碼中的cookie和圖片存儲路徑需要替換為你本地的。
  運行后的結果如下:
  
  我按照微博把圖片分到文件夾里。如果覺(jué)得不直觀(guān),想把所有圖片都放在一個(gè)目錄下,可以去掉這一層文件夾。
  總結
  本文介紹如何通過(guò)一個(gè)簡(jiǎn)單的爬蟲(chóng)獲取微博圖片搜索結果。代碼量相當少,但是對一些人來(lái)說(shuō)是很有幫助的,省時(shí)省力。還可以展開(kāi),除了圖片,還可以獲取其他搜索內容,比如微博文字、視頻、購物鏈接等。 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(一種全新的方式來(lái)獲取圖片素材,你想要的這里全都有)
  你還去網(wǎng)站搜什么圖?
  你還在尋找百度圖片等圖片素材網(wǎng)站嗎?
  今天給大家分享一個(gè)全新的圖片素材獲取方式。你想要的這里都有!
  是新浪微博!新一代的超級流量門(mén)戶(hù),甚至現在很多人都用它作為替代百度搜索的工具。以前是找杜娘找東西,現在是搜微博。
  比如某個(gè)宅男想看清純少女的照片,越多越好。他會(huì )這樣搜索:
  
  然后,他會(huì )逐頁(yè)閱讀和欣賞這些吸引眼球的圖片,并在遇到喜歡的人時(shí)將大圖片下載到本地保存。
  
  作為一個(gè)python程序員,我懶得像這樣一頁(yè)一頁(yè)地翻頁(yè)。喜歡全部下載下來(lái)慢慢欣賞,爆了硬盤(pán)!類(lèi)似于以下內容:
  
  這種簡(jiǎn)單的問(wèn)題讓我們?yōu)閜ythoner寫(xiě)爬蟲(chóng)那么容易,何樂(lè )而不為呢?讓我直接與你分享。
  分析目標網(wǎng)站
  微博的搜索結果是分頁(yè)的,所以我們的思路肯定是分頁(yè)處理,逐頁(yè)解析。
  我們先來(lái)看看搜索結果:
  
  我們點(diǎn)擊“搜索”按鈕后,很容易找到搜索請求。此處網(wǎng)頁(yè)顯示了第一頁(yè)的結果。
  然后我們點(diǎn)擊“Next”,我們可以發(fā)現請求變成了如下:
  
  細心的話(huà),可能一眼就發(fā)現在請求后多了一個(gè)page參數,指的是頁(yè)碼。這很容易。我們只需要改變頁(yè)碼就可以請求對應頁(yè)面的內容。
  由于此請求返回一個(gè) HTML 頁(yè)面,因此我們需要在此頁(yè)面上努力找到指向圖像的鏈接。我們隨便用頁(yè)面元素檢查來(lái)定位一張圖片,會(huì )看到如下效果:
  
  我們可以看到這個(gè)div里面的action-data是一個(gè)集合,下面li里面img的action-data是單張圖片的數據。
  接下來(lái),我們點(diǎn)擊“查看大圖”按鈕,瀏覽器會(huì )跳轉到一個(gè)新頁(yè)面,頁(yè)面內容為大圖。
  
  從請求的 URL 往下看,我發(fā)現了這個(gè):
  
  我把這個(gè)網(wǎng)址復制到瀏覽器請求中,發(fā)現這正是我們需要的大圖。我們也可以很容易的看到這個(gè)URL的特點(diǎn),就是最后我們在上面的action-data中添加了pic_id。
  這樣,我們的思路就很清晰了,下面是獲取一頁(yè)圖片的思路:
  獲取頁(yè)面內容;在頁(yè)面內容中找到圖片ID;拼接查看大圖的URL,請求獲取圖片;將圖像寫(xiě)入本地。代碼代碼
  思路很清晰,需要代碼code來(lái)驗證。由于代碼比較簡(jiǎn)單,我就一次性給大家展示一下。
  import requests
import re
import os
import time
cookie = {
&#39;Cookie&#39;: &#39;your cookie&#39;
}
header = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4144.2 Safari/537.36&#39;
}
get_order = input(&#39;是否啟動(dòng)程序? yes or no: &#39;)
number = 1
store_path = &#39;your path&#39;
while True:
if get_order != &#39;no&#39;:
print(&#39;抓取中......&#39;) # 下面的鏈接填寫(xiě)微博搜索的鏈接
url = f&#39;https://s.weibo.com/weibo%3Fq% ... ge%3D{number}&#39;
response = requests.get(url, cookies=cookie)
result = response.text
print(result)
detail = re.findall(&#39;data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">&#39;, result)
for part in detail:
uid = part[0]
mid = part[1]
pids = part[2]
for picid in pids.split(&#39;,&#39;):
url_x = f&#39;https://wx1.sinaimg.cn/large/%s.jpg&#39;%picid # 這里就是大圖鏈接了
response_photo = requests.get(url_x, headers=header)
file_name = url_x[-10:]
if not os.path.exists(store_path+uid):
os.mkdir(store_path+uid)
with open(store_path+uid + &#39;/&#39; + file_name, &#39;ab&#39;) as f: # 保存文件
f.write(response_photo.content)
time.sleep(0.5)
print(&#39;獲取完畢&#39;)
get_order = input(&#39;是否繼續獲取下一頁(yè)? Y:yes N:no: &#39;)
if get_order != &#39;no&#39;:
number += 1
else:
print(&#39;程序結束&#39;)
break
else:
print(&#39;程序結束&#39;)
break
  我這里采用了逐頁(yè)斷點(diǎn)的形式,方便調試。如果你想一次得到所有頁(yè)面的圖片,你可以把這些輸入判斷去掉,一次性全部運行。代碼中的cookie和圖片存儲路徑需要替換為你本地的。
  運行后的結果如下:
  
  我按照微博把圖片分到文件夾里。如果覺(jué)得不直觀(guān),想把所有圖片都放在一個(gè)目錄下,可以去掉這一層文件夾。
  總結
  本文介紹如何通過(guò)一個(gè)簡(jiǎn)單的爬蟲(chóng)獲取微博圖片搜索結果。代碼量相當少,但是對一些人來(lái)說(shuō)是很有幫助的,省時(shí)省力。還可以展開(kāi),除了圖片,還可以獲取其他搜索內容,比如微博文字、視頻、購物鏈接等。

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 103 次瀏覽 ? 2021-09-30 17:20 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())
  本文文章主要介紹Python3簡(jiǎn)單爬蟲(chóng)抓取網(wǎng)頁(yè)圖片代碼示例。文章通過(guò)示例代碼介紹了非常詳細的例子。對大家的學(xué)習或工作有一定的參考學(xué)習價(jià)值。有需要的朋友可以參考。
  網(wǎng)上有很多用python2編寫(xiě)的爬蟲(chóng)抓取網(wǎng)頁(yè)圖片的例子,但是不適合新手(新手使用python3環(huán)境,不兼容python2),
  于是寫(xiě)了一個(gè)簡(jiǎn)單的例子,用Python3語(yǔ)法抓取網(wǎng)頁(yè)圖片。希望能幫到你,也希望你能批評指正。
  
import urllib.request
import re
import os
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = imgre.findall(html)#表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
x = 0
path = 'D:\\test'
# 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建
if not os.path.isdir(path):
os.makedirs(path)
paths = path+'\\' #保存在test路徑下
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串
x = x + 1
return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866")#獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
print (getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
  以上就是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(,文中示例代碼介紹-上海怡健醫學(xué)())
  本文文章主要介紹Python3簡(jiǎn)單爬蟲(chóng)抓取網(wǎng)頁(yè)圖片代碼示例。文章通過(guò)示例代碼介紹了非常詳細的例子。對大家的學(xué)習或工作有一定的參考學(xué)習價(jià)值。有需要的朋友可以參考。
  網(wǎng)上有很多用python2編寫(xiě)的爬蟲(chóng)抓取網(wǎng)頁(yè)圖片的例子,但是不適合新手(新手使用python3環(huán)境,不兼容python2),
  于是寫(xiě)了一個(gè)簡(jiǎn)單的例子,用Python3語(yǔ)法抓取網(wǎng)頁(yè)圖片。希望能幫到你,也希望你能批評指正。
  
import urllib.request
import re
import os
import urllib
#根據給定的網(wǎng)址來(lái)獲取網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html.decode('UTF-8')
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = imgre.findall(html)#表示在整個(gè)網(wǎng)頁(yè)中過(guò)濾出所有圖片的地址,放在imglist中
x = 0
path = 'D:\\test'
# 將圖片保存到D:\\test文件夾中,如果沒(méi)有test文件夾則創(chuàng )建
if not os.path.isdir(path):
os.makedirs(path)
paths = path+'\\' #保存在test路徑下
for imgurl in imglist:
urllib.request.urlretrieve(imgurl,'{0}{1}.jpg'.format(paths,x)) #打開(kāi)imglist中保存的圖片網(wǎng)址,并下載圖片保存在本地,format格式化字符串
x = x + 1
return imglist
html = getHtml("http://tieba.baidu.com/p/2460150866";)#獲取該網(wǎng)址網(wǎng)頁(yè)詳細信息,得到的html就是網(wǎng)頁(yè)的源代碼
print (getImg(html)) #從網(wǎng)頁(yè)源代碼中分析并下載保存圖片
  以上就是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng) )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 317 次瀏覽 ? 2021-09-30 02:11 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng)
)
  這篇文章是針對初學(xué)者的,我會(huì )用最簡(jiǎn)單的案例來(lái)告訴你如何開(kāi)始使用python爬蟲(chóng)!
  開(kāi)始使用Python爬蟲(chóng),首先需要解決四個(gè)問(wèn)題
  一、你應該知道什么是爬蟲(chóng)吧?
  網(wǎng)絡(luò )爬蟲(chóng)其實(shí)叫做Web Data采集,比較容易理解。
  就是通過(guò)編程向Web服務(wù)器請求數據(HTML形式),然后解析HTML,提取出你想要的數據。
  總結為四個(gè)主要步驟:
  根據url獲取HTML數據解析HTML,獲取目標信息存儲數據重復第一步
  這將涉及很多內容,例如數據庫、Web 服務(wù)器、HTTP 協(xié)議、HTML、數據科學(xué)、網(wǎng)絡(luò )安全和圖像處理。但是對于初學(xué)者來(lái)說(shuō),沒(méi)必要掌握那么多。
  二、python學(xué)多少
  如果你不懂python,你需要學(xué)習python,一種非常簡(jiǎn)單的語(yǔ)言(相對于其他語(yǔ)言)。
  編程語(yǔ)言的基本語(yǔ)法無(wú)非是數據類(lèi)型、數據結構、運算符、邏輯結構、函數、文件IO、錯誤處理。學(xué)習起來(lái)會(huì )很枯燥,但并不難。
  剛開(kāi)始,你甚至不需要學(xué)習python類(lèi)、多線(xiàn)程、模塊等高難度內容。找本初學(xué)者的教材或者網(wǎng)上教程,花十幾天的時(shí)間,可以對python的基礎有三到四點(diǎn)的了解,這時(shí)候就可以玩爬蟲(chóng)了!
  當然,前提是你這十天一定要認真打好代碼,反復咀嚼語(yǔ)法邏輯,比如列表、字典、字符串、if語(yǔ)句、for循環(huán)等核心東西一定要熟透心手.
  教材選擇比較多。個(gè)人推薦python官方文檔和python簡(jiǎn)明教程。前者更系統,后者更簡(jiǎn)潔。
  三、為什么你需要了解 HTML
  前面提到爬蟲(chóng)想要爬取的數據隱藏在網(wǎng)頁(yè)的HTML中,有點(diǎn)間接!
  維基百科這樣解釋 HTML
  超文本標記語(yǔ)言(英文:Hyper Text Markup Language,簡(jiǎn)稱(chēng) HTML)是一種用于創(chuàng )建網(wǎng)頁(yè)的標準標記語(yǔ)言。HTML 是一項基本技術(shù),經(jīng)常與 CSS 和許多 網(wǎng)站 一起使用來(lái)設計網(wǎng)頁(yè)、Web 應用程序和移動(dòng)應用程序的用戶(hù)界面 [3]。Web 瀏覽器可以讀取 HTML 文件并將它們呈現為可視化網(wǎng)頁(yè)。HTML 描述了 網(wǎng)站 的結構和語(yǔ)義以及線(xiàn)索的呈現,使其成為標記語(yǔ)言而不是編程語(yǔ)言。
  綜上所述,HTML 是一種用于創(chuàng )建網(wǎng)頁(yè)的標記語(yǔ)言,嵌入了文本、圖像等數據,可以被瀏覽器讀取并呈現為我們看到的網(wǎng)頁(yè)。
  這就是為什么我們先爬取 HTML,然后解析數據,因為數據隱藏在 HTML 中。
  學(xué)習HTML并不難,它不是一門(mén)編程語(yǔ)言,你只需要熟悉它的標記規則即可,這里是一個(gè)大致的介紹。
  HTML 標簽包括幾個(gè)關(guān)鍵部分,例如標簽(及其屬性)、基于字符的數據類(lèi)型、字符引用和實(shí)體引用。
  HTML 標簽是最常見(jiàn)的,通常成對出現,例如和。
  在成對出現的標簽中,第一個(gè)標簽是開(kāi)始標簽,第二個(gè)標簽是結束標簽。兩個(gè)標簽之間是元素的內容(文本、圖像等)。有些標簽沒(méi)有內容,是空元素,例如。
  下面是一個(gè)經(jīng)典的 Hello World 程序示例:
  

This is a title


<p>Hello world!

</p>
  HTML 文檔由嵌套的 HTML 元素組成。它們由 HTML 標記表示,括在尖括號中,例如 [56]
  通常,一個(gè)元素由一對標簽表示:“開(kāi)始標簽”和“結束標簽”。如果元素收錄文本內容,則將其放置在這些標簽之間。
  四、了解python網(wǎng)絡(luò )爬蟲(chóng)的基本原理
  在編寫(xiě)python爬蟲(chóng)程序時(shí),只需要做以下兩件事:
  對于這兩件事,python有相應的庫可以幫你做,你只需要知道如何使用它們即可。
  五、 使用python庫抓取百度首頁(yè)標題和圖片
  首先,發(fā)送HTML數據請求,可以使用python內置庫urllib,它有一個(gè)urlopen函數,可以根據url獲取HTML文件。這里,嘗試獲取百度首頁(yè)的HTML內容""
  # 導入urllib庫的urlopen函數
from urllib.request import urlopen
# 發(fā)出請求,獲取html
html = urlopen("https://www.baidu.com/")
# 獲取的html內容是字節,將其轉化為字符串
html_text = bytes.decode(html.read())
# 打印html內容
print(html_text)
  看效果:
  
  部分截取輸出html內容
  我們來(lái)看看真正的百度主頁(yè)的html是什么樣子的。如果您使用的是谷歌瀏覽器,在百度首頁(yè)打開(kāi)設置&gt;更多工具&gt;開(kāi)發(fā)者工具,點(diǎn)擊元素,可以看到:
  
  在 Google Chrome 中查看 HTML
  通過(guò)對比你就會(huì )知道,剛才通過(guò)python程序得到的HTML和網(wǎng)頁(yè)是一樣的!
  獲取到HTML后,下一步就是解析HTML,因為你想要的文字、圖片、視頻都隱藏在HTML中,需要通過(guò)某種方式提取出需要的數據。
  Python 還提供了許多強大的庫來(lái)幫助您解析 HTML。這里使用了著(zhù)名的python庫BeautifulSoup作為解析上面已經(jīng)得到的HTML的工具。
  BeautifulSoup 是第三方庫,需要安裝使用。只需在命令行上使用 pip 安裝它:
  pip install bs4
  BeautifulSoup 會(huì )將 HTML 內容轉換為結構化內容,您只需要從結構化標簽中提取數據即可:
  
  比如我想得到百度首頁(yè)的標題“我點(diǎn)擊百度就知道了”,怎么辦?
  這個(gè)title被兩個(gè)label困住了,一個(gè)是primary label,一個(gè)是secondary label,所以從label里面取出信息就行了。
  
  # 導入urlopen函數
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 打印標題
print(title)
  看看結果:
  
  到此,百度主頁(yè)的標題就提取成功了。
  如果我想下載百度首頁(yè)標志圖片怎么辦?
  第一步是獲取網(wǎng)頁(yè)的所有圖片標簽和網(wǎng)址。這個(gè)可以使用BeautifulSoup的findAll方法,可以提取標簽中收錄的信息。
  一般來(lái)說(shuō),HTML中所有的圖片信息都會(huì )在“img”標簽中,所以我們可以通過(guò)findAll("img")來(lái)獲取所有的圖片信息。
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 使用find_all函數獲取所有圖片的信息
pic_info = obj.find_all(&#39;img&#39;)
# 分別打印每個(gè)圖片的信息
for i in pic_info:
print(i)
  看看結果:
  
  打印所有圖片的屬性,包括class(元素類(lèi)名)、src(鏈接地址)、長(cháng)寬高等。
  其中有一張百度首頁(yè)logo的圖片,圖片的類(lèi)(元素類(lèi)名)為index-logo-src。
  
  [//www.baidu.com/img/bd_logo1.png, //www.baidu.com/img/baidu_jgylogo3.gif]
  可以看到圖片的鏈接地址在src屬性中。我們需要獲取圖片的鏈接地址:
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 打印鏈接
print(logo_url)
  結果:
  
  獲取地址后,可以使用urllib.urlretrieve函數下載logo圖片
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 導入urlretrieve函數,用于下載圖片
from urllib.request import urlretrieve
# 請求獲取HTML
html = urlopen("https://www.baidu.com/")
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 使用urlretrieve下載圖片
  最終圖像保存在'logo.png'
  
  六、結論
  本文以抓取百度首頁(yè)標題和logo圖片為例,講解python爬蟲(chóng)的基本原理以及相關(guān)python庫的使用。這是比較基礎的爬蟲(chóng)知識,還有很多優(yōu)秀的python爬蟲(chóng)庫和框架有待以后學(xué)習。
  當然,如果你掌握了本文討論的知識點(diǎn),你就已經(jīng)開(kāi)始使用python爬蟲(chóng)了。來(lái)吧,男孩!
  這里有一個(gè)方便大家的python學(xué)習交流群:196872581免費領(lǐng)取學(xué)習路線(xiàn)、大綱、課程等資料
   查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本文針對初學(xué)者,我會(huì )用最簡(jiǎn)單的案例告訴你如何入門(mén)python爬蟲(chóng)
)
  這篇文章是針對初學(xué)者的,我會(huì )用最簡(jiǎn)單的案例來(lái)告訴你如何開(kāi)始使用python爬蟲(chóng)!
  開(kāi)始使用Python爬蟲(chóng),首先需要解決四個(gè)問(wèn)題
  一、你應該知道什么是爬蟲(chóng)吧?
  網(wǎng)絡(luò )爬蟲(chóng)其實(shí)叫做Web Data采集,比較容易理解。
  就是通過(guò)編程向Web服務(wù)器請求數據(HTML形式),然后解析HTML,提取出你想要的數據。
  總結為四個(gè)主要步驟:
  根據url獲取HTML數據解析HTML,獲取目標信息存儲數據重復第一步
  這將涉及很多內容,例如數據庫、Web 服務(wù)器、HTTP 協(xié)議、HTML、數據科學(xué)、網(wǎng)絡(luò )安全和圖像處理。但是對于初學(xué)者來(lái)說(shuō),沒(méi)必要掌握那么多。
  二、python學(xué)多少
  如果你不懂python,你需要學(xué)習python,一種非常簡(jiǎn)單的語(yǔ)言(相對于其他語(yǔ)言)。
  編程語(yǔ)言的基本語(yǔ)法無(wú)非是數據類(lèi)型、數據結構、運算符、邏輯結構、函數、文件IO、錯誤處理。學(xué)習起來(lái)會(huì )很枯燥,但并不難。
  剛開(kāi)始,你甚至不需要學(xué)習python類(lèi)、多線(xiàn)程、模塊等高難度內容。找本初學(xué)者的教材或者網(wǎng)上教程,花十幾天的時(shí)間,可以對python的基礎有三到四點(diǎn)的了解,這時(shí)候就可以玩爬蟲(chóng)了!
  當然,前提是你這十天一定要認真打好代碼,反復咀嚼語(yǔ)法邏輯,比如列表、字典、字符串、if語(yǔ)句、for循環(huán)等核心東西一定要熟透心手.
  教材選擇比較多。個(gè)人推薦python官方文檔和python簡(jiǎn)明教程。前者更系統,后者更簡(jiǎn)潔。
  三、為什么你需要了解 HTML
  前面提到爬蟲(chóng)想要爬取的數據隱藏在網(wǎng)頁(yè)的HTML中,有點(diǎn)間接!
  維基百科這樣解釋 HTML
  超文本標記語(yǔ)言(英文:Hyper Text Markup Language,簡(jiǎn)稱(chēng) HTML)是一種用于創(chuàng )建網(wǎng)頁(yè)的標準標記語(yǔ)言。HTML 是一項基本技術(shù),經(jīng)常與 CSS 和許多 網(wǎng)站 一起使用來(lái)設計網(wǎng)頁(yè)、Web 應用程序和移動(dòng)應用程序的用戶(hù)界面 [3]。Web 瀏覽器可以讀取 HTML 文件并將它們呈現為可視化網(wǎng)頁(yè)。HTML 描述了 網(wǎng)站 的結構和語(yǔ)義以及線(xiàn)索的呈現,使其成為標記語(yǔ)言而不是編程語(yǔ)言。
  綜上所述,HTML 是一種用于創(chuàng )建網(wǎng)頁(yè)的標記語(yǔ)言,嵌入了文本、圖像等數據,可以被瀏覽器讀取并呈現為我們看到的網(wǎng)頁(yè)。
  這就是為什么我們先爬取 HTML,然后解析數據,因為數據隱藏在 HTML 中。
  學(xué)習HTML并不難,它不是一門(mén)編程語(yǔ)言,你只需要熟悉它的標記規則即可,這里是一個(gè)大致的介紹。
  HTML 標簽包括幾個(gè)關(guān)鍵部分,例如標簽(及其屬性)、基于字符的數據類(lèi)型、字符引用和實(shí)體引用。
  HTML 標簽是最常見(jiàn)的,通常成對出現,例如和。
  在成對出現的標簽中,第一個(gè)標簽是開(kāi)始標簽,第二個(gè)標簽是結束標簽。兩個(gè)標簽之間是元素的內容(文本、圖像等)。有些標簽沒(méi)有內容,是空元素,例如。
  下面是一個(gè)經(jīng)典的 Hello World 程序示例:
  

This is a title


<p>Hello world!

</p>
  HTML 文檔由嵌套的 HTML 元素組成。它們由 HTML 標記表示,括在尖括號中,例如 [56]
  通常,一個(gè)元素由一對標簽表示:“開(kāi)始標簽”和“結束標簽”。如果元素收錄文本內容,則將其放置在這些標簽之間。
  四、了解python網(wǎng)絡(luò )爬蟲(chóng)的基本原理
  在編寫(xiě)python爬蟲(chóng)程序時(shí),只需要做以下兩件事:
  對于這兩件事,python有相應的庫可以幫你做,你只需要知道如何使用它們即可。
  五、 使用python庫抓取百度首頁(yè)標題和圖片
  首先,發(fā)送HTML數據請求,可以使用python內置庫urllib,它有一個(gè)urlopen函數,可以根據url獲取HTML文件。這里,嘗試獲取百度首頁(yè)的HTML內容""
  # 導入urllib庫的urlopen函數
from urllib.request import urlopen
# 發(fā)出請求,獲取html
html = urlopen("https://www.baidu.com/";)
# 獲取的html內容是字節,將其轉化為字符串
html_text = bytes.decode(html.read())
# 打印html內容
print(html_text)
  看效果:
  
  部分截取輸出html內容
  我們來(lái)看看真正的百度主頁(yè)的html是什么樣子的。如果您使用的是谷歌瀏覽器,在百度首頁(yè)打開(kāi)設置&gt;更多工具&gt;開(kāi)發(fā)者工具,點(diǎn)擊元素,可以看到:
  
  在 Google Chrome 中查看 HTML
  通過(guò)對比你就會(huì )知道,剛才通過(guò)python程序得到的HTML和網(wǎng)頁(yè)是一樣的!
  獲取到HTML后,下一步就是解析HTML,因為你想要的文字、圖片、視頻都隱藏在HTML中,需要通過(guò)某種方式提取出需要的數據。
  Python 還提供了許多強大的庫來(lái)幫助您解析 HTML。這里使用了著(zhù)名的python庫BeautifulSoup作為解析上面已經(jīng)得到的HTML的工具。
  BeautifulSoup 是第三方庫,需要安裝使用。只需在命令行上使用 pip 安裝它:
  pip install bs4
  BeautifulSoup 會(huì )將 HTML 內容轉換為結構化內容,您只需要從結構化標簽中提取數據即可:
  
  比如我想得到百度首頁(yè)的標題“我點(diǎn)擊百度就知道了”,怎么辦?
  這個(gè)title被兩個(gè)label困住了,一個(gè)是primary label,一個(gè)是secondary label,所以從label里面取出信息就行了。
  
  # 導入urlopen函數
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 打印標題
print(title)
  看看結果:
  
  到此,百度主頁(yè)的標題就提取成功了。
  如果我想下載百度首頁(yè)標志圖片怎么辦?
  第一步是獲取網(wǎng)頁(yè)的所有圖片標簽和網(wǎng)址。這個(gè)可以使用BeautifulSoup的findAll方法,可以提取標簽中收錄的信息。
  一般來(lái)說(shuō),HTML中所有的圖片信息都會(huì )在“img”標簽中,所以我們可以通過(guò)findAll("img")來(lái)獲取所有的圖片信息。
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 使用find_all函數獲取所有圖片的信息
pic_info = obj.find_all(&#39;img&#39;)
# 分別打印每個(gè)圖片的信息
for i in pic_info:
print(i)
  看看結果:
  
  打印所有圖片的屬性,包括class(元素類(lèi)名)、src(鏈接地址)、長(cháng)寬高等。
  其中有一張百度首頁(yè)logo的圖片,圖片的類(lèi)(元素類(lèi)名)為index-logo-src。
  
  [//www.baidu.com/img/bd_logo1.png, //www.baidu.com/img/baidu_jgylogo3.gif]
  可以看到圖片的鏈接地址在src屬性中。我們需要獲取圖片的鏈接地址:
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 打印鏈接
print(logo_url)
  結果:
  
  獲取地址后,可以使用urllib.urlretrieve函數下載logo圖片
  # 導入urlopen
from urllib.request import urlopen
# 導入BeautifulSoup
from bs4 import BeautifulSoup as bf
# 導入urlretrieve函數,用于下載圖片
from urllib.request import urlretrieve
# 請求獲取HTML
html = urlopen("https://www.baidu.com/";)
# 用BeautifulSoup解析html
obj = bf(html.read(),&#39;html.parser&#39;)
# 從標簽head、title里提取標題
title = obj.head.title
# 只提取logo圖片的信息
logo_pic_info = obj.find_all(&#39;img&#39;,class_="index-logo-src")
# 提取logo圖片的鏈接
logo_url = "https:"+logo_pic_info[0][&#39;src&#39;]
# 使用urlretrieve下載圖片
  最終圖像保存在'logo.png'
  
  六、結論
  本文以抓取百度首頁(yè)標題和logo圖片為例,講解python爬蟲(chóng)的基本原理以及相關(guān)python庫的使用。這是比較基礎的爬蟲(chóng)知識,還有很多優(yōu)秀的python爬蟲(chóng)庫和框架有待以后學(xué)習。
  當然,如果你掌握了本文討論的知識點(diǎn),你就已經(jīng)開(kāi)始使用python爬蟲(chóng)了。來(lái)吧,男孩!
  這里有一個(gè)方便大家的python學(xué)習交流群:196872581免費領(lǐng)取學(xué)習路線(xiàn)、大綱、課程等資料
  

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 82 次瀏覽 ? 2021-09-29 03:27 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)
  爬蟲(chóng)筆記 [01]
  一、前言
  記錄下自己爬蟲(chóng)練習的開(kāi)始和結束,這次用下載的圖片來(lái)展示主要過(guò)程。
  二、 爬蟲(chóng)邏輯理解
  網(wǎng)頁(yè)上的幾乎所有內容都在服務(wù)器上。在網(wǎng)上查東西時(shí),類(lèi)似于對服務(wù)器說(shuō):“我想看滑雪的照片”。服務(wù)器首先聽(tīng)到您的喊叫聲,然后嗡嗡作響。開(kāi)始向您發(fā)送帶有代碼的服務(wù)器滑雪圖片和網(wǎng)頁(yè)。數據當然是二進(jìn)制的,所以你需要把數據編碼成人類(lèi)可以理解的東西。最后顯示出你想要的圖片,你可以下載保存到電腦中。
  整個(gè)過(guò)程就是有人要東西,服務(wù)器聽(tīng)到有人要東西,服務(wù)器把東西發(fā)給你,你通過(guò)各種方式調出具體的內容。
  三、 爬圖
  爬蟲(chóng)需要導入requests庫,用于向服務(wù)器請求內容(發(fā)送請求)。os 庫用于目錄和文件操作,這是一個(gè)非?;A的操作。
  # 導入使用的庫
import requests
import os
  在百度貼吧上找到了一張滑雪的圖片,想下載。直接另存為很方便,不能手動(dòng)存成1000張。
  
  一、右鍵復制圖片地址
  
  # 圖片地址存到變量中
imurl = &#39;http://tiebapic.baidu.com/forum/w%3D580%3B/sign=\ac30c67119f41bd5da53e8fc61e180cb/78310a55b319ebc4666b57c39526cffc1e17165c.jpg&#39;
  然后我們需要找到一個(gè)叫做“請求頭”的東西,理解為個(gè)人名字,服務(wù)器需要知道是誰(shuí)在請求這個(gè)東西,而user-agent主要收錄瀏覽器的信息。因為爬蟲(chóng)是模擬成年人用電腦搜索內容的方式,如果user-agent不是瀏覽器的名字,很可能就是爬蟲(chóng),會(huì )被攔截。
  
  # 從瀏覽器中復制下來(lái)后,要用字典類(lèi)型包起來(lái),鍵值都是字符串類(lèi)型
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36&#39;}
# 這里就是做一個(gè)向服務(wù)器要內容的請求,對應的連接和偽裝的瀏覽器名字。
# imr是服務(wù)器對你請求的回答(響應),包含了圖片數據在內的一些信息
imr = requests.get(url = imurl, headers = headers)
# 觀(guān)察狀態(tài)碼,就是看服務(wù)器到底有沒(méi)有理你,理你了就代表請求成功
# 如果是狀態(tài)碼是200,就代表服務(wù)器理你了
print(imr.status_code)
  
  最終結論取決于編碼是什么。如果編碼不同,最終的信息就會(huì )亂七八糟。
  # 一般utf8是正確的編碼,常規操作是imr.encoding = imr.apparent_encoding
print(imr.encoding)
print(imr.apparent_coding)
# 查看當前操作目錄,做一個(gè)新目錄出來(lái)
cwd = os.getcwd()
print(cwd)
newpath = os.mkdir(cwd + &#39;/spider&#39;)
path_photo = cwd + &#39;/spider/snowboarding.png&#39;
# 圖片是二進(jìn)制,所以用wb的模式進(jìn)行寫(xiě)入
with open(pathn_photo, &#39;wb&#39;) as im:
im.write(imr.content)
  最后我們下載了圖片 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬蟲(chóng)記錄自己練習爬蟲(chóng)的始末,這次用下載圖片展示主流程)
  爬蟲(chóng)筆記 [01]
  一、前言
  記錄下自己爬蟲(chóng)練習的開(kāi)始和結束,這次用下載的圖片來(lái)展示主要過(guò)程。
  二、 爬蟲(chóng)邏輯理解
  網(wǎng)頁(yè)上的幾乎所有內容都在服務(wù)器上。在網(wǎng)上查東西時(shí),類(lèi)似于對服務(wù)器說(shuō):“我想看滑雪的照片”。服務(wù)器首先聽(tīng)到您的喊叫聲,然后嗡嗡作響。開(kāi)始向您發(fā)送帶有代碼的服務(wù)器滑雪圖片和網(wǎng)頁(yè)。數據當然是二進(jìn)制的,所以你需要把數據編碼成人類(lèi)可以理解的東西。最后顯示出你想要的圖片,你可以下載保存到電腦中。
  整個(gè)過(guò)程就是有人要東西,服務(wù)器聽(tīng)到有人要東西,服務(wù)器把東西發(fā)給你,你通過(guò)各種方式調出具體的內容。
  三、 爬圖
  爬蟲(chóng)需要導入requests庫,用于向服務(wù)器請求內容(發(fā)送請求)。os 庫用于目錄和文件操作,這是一個(gè)非?;A的操作。
  # 導入使用的庫
import requests
import os
  在百度貼吧上找到了一張滑雪的圖片,想下載。直接另存為很方便,不能手動(dòng)存成1000張。
  
  一、右鍵復制圖片地址
  
  # 圖片地址存到變量中
imurl = &#39;http://tiebapic.baidu.com/forum/w%3D580%3B/sign=\ac30c67119f41bd5da53e8fc61e180cb/78310a55b319ebc4666b57c39526cffc1e17165c.jpg&#39;
  然后我們需要找到一個(gè)叫做“請求頭”的東西,理解為個(gè)人名字,服務(wù)器需要知道是誰(shuí)在請求這個(gè)東西,而user-agent主要收錄瀏覽器的信息。因為爬蟲(chóng)是模擬成年人用電腦搜索內容的方式,如果user-agent不是瀏覽器的名字,很可能就是爬蟲(chóng),會(huì )被攔截。
  
  # 從瀏覽器中復制下來(lái)后,要用字典類(lèi)型包起來(lái),鍵值都是字符串類(lèi)型
headers = {&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36&#39;}
# 這里就是做一個(gè)向服務(wù)器要內容的請求,對應的連接和偽裝的瀏覽器名字。
# imr是服務(wù)器對你請求的回答(響應),包含了圖片數據在內的一些信息
imr = requests.get(url = imurl, headers = headers)
# 觀(guān)察狀態(tài)碼,就是看服務(wù)器到底有沒(méi)有理你,理你了就代表請求成功
# 如果是狀態(tài)碼是200,就代表服務(wù)器理你了
print(imr.status_code)
  
  最終結論取決于編碼是什么。如果編碼不同,最終的信息就會(huì )亂七八糟。
  # 一般utf8是正確的編碼,常規操作是imr.encoding = imr.apparent_encoding
print(imr.encoding)
print(imr.apparent_coding)
# 查看當前操作目錄,做一個(gè)新目錄出來(lái)
cwd = os.getcwd()
print(cwd)
newpath = os.mkdir(cwd + &#39;/spider&#39;)
path_photo = cwd + &#39;/spider/snowboarding.png&#39;
# 圖片是二進(jìn)制,所以用wb的模式進(jìn)行寫(xiě)入
with open(pathn_photo, &#39;wb&#39;) as im:
im.write(imr.content)
  最后我們下載了圖片

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-29 03:26 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))
  爬蟲(chóng)訓練項目1_爬行百度貼吧
  前言
  這是我開(kāi)始學(xué)習爬蟲(chóng)時(shí)的第一個(gè)手工練習項目。在B站看到了一些教學(xué)視頻,覺(jué)得挺有意思的,就決定跟上。
  
  1、找到對方的c位置(確定要爬取的目標)
  要抓取網(wǎng)頁(yè),首先需要知道網(wǎng)頁(yè)的 url
  首先用瀏覽器打開(kāi)貼吧網(wǎng)頁(yè)。
  
  搜索“上海海事大學(xué)”
  發(fā)現鏈接變?yōu)樯虾:J麓髮W(xué)&amp;fr=search
  
  點(diǎn)擊到第二頁(yè),再次觀(guān)察url,發(fā)現多了一個(gè)pn=50的參數
  
  嘗試將pn=50改為pn=0,發(fā)現剛才訪(fǎng)問(wèn)的是第一頁(yè)的內容。
  于是找到規則,第一頁(yè)pn=0,第二頁(yè)pn=50,
  那么第三頁(yè)應該是pn=100,依此類(lèi)推
  至于另一個(gè)參數:ie=utf-8,可以刪除
  所以,我們需要訪(fǎng)問(wèn)的鏈接格式是
  ——&amp;Pn=——
  2、發(fā)起進(jìn)攻(發(fā)送請求)
  上一步我們已經(jīng)知道要爬取的url
  現在你需要發(fā)送請求
  至于如何發(fā)送請求
  我們需要安裝一個(gè)庫:請求庫
  pip 安裝請求
  然后導入這個(gè)庫
  import requests
  然后開(kāi)始構造url并存入列表
  url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
  復制瀏覽器logo,放在headers中(有的網(wǎng)站會(huì )根據瀏覽器logo判斷是否是爬蟲(chóng),所以加個(gè)logo防止一)
  headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
  
  然后發(fā)送請求并保存頁(yè)面
  for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  3、 攻擊敵方水晶(完整代碼)
  """
獲取貼吧內容
"""
import requests
url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  然后在pycharm中打開(kāi)保存的網(wǎng)頁(yè)并運行
  
  
  和瀏覽器搜索到的網(wǎng)頁(yè)一模一樣
  勝利
  至此,你已經(jīng)基本完成了學(xué)習爬蟲(chóng)的第一步
  以后學(xué)爬的時(shí)候會(huì )慢慢更新其他的訓練項目 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
上海海事大學(xué)‘發(fā)現鏈接變成第一個(gè)項目(組圖))
  爬蟲(chóng)訓練項目1_爬行百度貼吧
  前言
  這是我開(kāi)始學(xué)習爬蟲(chóng)時(shí)的第一個(gè)手工練習項目。在B站看到了一些教學(xué)視頻,覺(jué)得挺有意思的,就決定跟上。
  
  1、找到對方的c位置(確定要爬取的目標)
  要抓取網(wǎng)頁(yè),首先需要知道網(wǎng)頁(yè)的 url
  首先用瀏覽器打開(kāi)貼吧網(wǎng)頁(yè)。
  
  搜索“上海海事大學(xué)”
  發(fā)現鏈接變?yōu)樯虾:J麓髮W(xué)&amp;fr=search
  
  點(diǎn)擊到第二頁(yè),再次觀(guān)察url,發(fā)現多了一個(gè)pn=50的參數
  
  嘗試將pn=50改為pn=0,發(fā)現剛才訪(fǎng)問(wèn)的是第一頁(yè)的內容。
  于是找到規則,第一頁(yè)pn=0,第二頁(yè)pn=50,
  那么第三頁(yè)應該是pn=100,依此類(lèi)推
  至于另一個(gè)參數:ie=utf-8,可以刪除
  所以,我們需要訪(fǎng)問(wèn)的鏈接格式是
  ——&amp;Pn=——
  2、發(fā)起進(jìn)攻(發(fā)送請求)
  上一步我們已經(jīng)知道要爬取的url
  現在你需要發(fā)送請求
  至于如何發(fā)送請求
  我們需要安裝一個(gè)庫:請求庫
  pip 安裝請求
  然后導入這個(gè)庫
  import requests
  然后開(kāi)始構造url并存入列表
  url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
  復制瀏覽器logo,放在headers中(有的網(wǎng)站會(huì )根據瀏覽器logo判斷是否是爬蟲(chóng),所以加個(gè)logo防止一)
  headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
  
  然后發(fā)送請求并保存頁(yè)面
  for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  3、 攻擊敵方水晶(完整代碼)
  """
獲取貼吧內容
"""
import requests
url = &#39;https://tieba.baidu.com/f?kw={}&pn={}&#39;
text = input("請輸入貼吧的名字:")
num = int(input(&#39;輸入要爬取的頁(yè)數:&#39;))
url_list = [url.format(text, i * 50) for i in range(num)]
print(url_list)
headers = {
&#39;User-Agent&#39;: &#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36&#39;}
for item_url in url_list:
response = requests.get(item_url, headers=headers)
file_name = &#39;貼吧_&#39; + text + &#39;第{}頁(yè)&#39;.format(url_list.index(item_url) + 1) + &#39;.html&#39;
with open(file_name, &#39;w&#39;, encoding=&#39;utf-8&#39;) as f:
f.write(response.content.decode())
  然后在pycharm中打開(kāi)保存的網(wǎng)頁(yè)并運行
  
  
  和瀏覽器搜索到的網(wǎng)頁(yè)一模一樣
  勝利
  至此,你已經(jīng)基本完成了學(xué)習爬蟲(chóng)的第一步
  以后學(xué)爬的時(shí)候會(huì )慢慢更新其他的訓練項目

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 70 次瀏覽 ? 2021-09-25 04:10 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)
  說(shuō)些什么
  其實(shí)一直對python這個(gè)語(yǔ)言很感興趣,但是之前一直在做圖像處理相關(guān)的事情,所以沒(méi)怎么關(guān)注這種不能觸及底層內存處理的語(yǔ)言,但是最近才真正用上通過(guò) C++ 字符。字符串處理和復雜的網(wǎng)絡(luò )框架崩潰了,看到大家都說(shuō)python很好玩,所以趁著(zhù)最近沒(méi)事的時(shí)候學(xué)習了python。
  昨天關(guān)注了廖雪峰老師的python教程(推薦基礎教程)??戳嘶镜臄祿Y構和邏輯后,我決定直接從一個(gè)實(shí)際的小項目來(lái)實(shí)踐。最好的語(yǔ)言方式),所以就選擇了一個(gè)比較簡(jiǎn)單的python爬蟲(chóng)項目來(lái)練習。
  寫(xiě)爬蟲(chóng)最重要的就是了解我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)是什么。其實(shí)我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)源代碼是一個(gè)字符串文件(當然也可以說(shuō)是二進(jìn)制文件)
  每次我們在瀏覽器上輸入一個(gè)網(wǎng)址,比如這個(gè)網(wǎng)址,瀏覽器會(huì )幫我們訪(fǎng)問(wèn)遠程服務(wù)器,并根據綁定的ip地址發(fā)送請求,遠程服務(wù)器會(huì )發(fā)送這個(gè)網(wǎng)頁(yè)的源代碼直接打包發(fā)送給我們的瀏覽器(html文件格式),然后我們的瀏覽器會(huì )解析這個(gè)字符串文件,比如通過(guò)div格式化和渲染網(wǎng)頁(yè),h1、h2 layouts 顯示,繼續發(fā)送請求給遠程服務(wù)器為img這些資源獲取圖片,然后在網(wǎng)頁(yè)上填寫(xiě)。
  什么是爬蟲(chóng)
  怎么說(shuō)呢,爬蟲(chóng),簡(jiǎn)單來(lái)說(shuō)就是模擬瀏覽器獲取一個(gè)網(wǎng)頁(yè)的源代碼。至于你用源代碼做什么,沒(méi)關(guān)系。
  說(shuō)的更復雜一點(diǎn),爬蟲(chóng)其實(shí)就是對所有網(wǎng)頁(yè)數據處理的綜合,比如:自動(dòng)抓取網(wǎng)頁(yè)源代碼,分析網(wǎng)頁(yè)數據,獲取關(guān)鍵數據并保存,或者自動(dòng)下載需要的網(wǎng)頁(yè)圖片、音頻,和視頻。
  那么當我們在寫(xiě)一個(gè)pythonm爬蟲(chóng)的時(shí)候,我們在寫(xiě)什么呢?
  當我們需要爬蟲(chóng)的時(shí)候,一般會(huì )遇到比較復雜的數據需求。這個(gè)要求對于手工作業(yè)來(lái)說(shuō)是非常復雜的。僅此要求就可以由爬蟲(chóng)輕松解決。
  那么首先確定我們的需求,我們需要這個(gè)爬蟲(chóng)做什么?
  比如我們認為一個(gè)教學(xué)網(wǎng)站的數據很有趣,但是它的格式太復雜,或者需要頻繁翻頁(yè),不能通過(guò)復制粘貼輕易獲取,爬蟲(chóng)就會(huì )起作用。
  總之,我們以一個(gè)爬蟲(chóng)的例子來(lái)說(shuō)明。
  爬取百度圖片ps:python版-Python 3.7.0
  第一個(gè)爬蟲(chóng)當然不能選擇太復雜的東西,涉及到很多復雜的網(wǎng)絡(luò )規則,所以我們來(lái)爬一些網(wǎng)站,簡(jiǎn)單的讓爬蟲(chóng)去爬。
  比如抓取下載關(guān)鍵詞下的某百度圖片的圖片數據。
  1、建立需求
  暫時(shí)確定以上需求,然后開(kāi)始寫(xiě)真正的爬蟲(chóng)代碼
  2、 觀(guān)察網(wǎng)頁(yè)源碼
  首先打開(kāi)百度圖片,隨意搜索一個(gè)關(guān)鍵詞。比如這次我會(huì )用我最喜歡的動(dòng)漫角色栗山未來(lái)來(lái)測試
  右鍵查看網(wǎng)頁(yè)源碼,可以看到每張圖片的原創(chuàng )地址都是以一個(gè)簡(jiǎn)單的“objURL”開(kāi)頭,以一個(gè)小逗號結尾,如下:
  
  基于此,我們可以確定爬蟲(chóng)應該如何運行。很簡(jiǎn)單——從網(wǎng)頁(yè)源碼中提取這些url并下載\(^o^)/~
  3、獲取網(wǎng)頁(yè)源碼
  其實(shí)這一步我是不想寫(xiě)的,只是擔心看了我博客剛學(xué)python的朋友可能會(huì )出錯,所以說(shuō)一下。
  首先,我們需要在python中導入網(wǎng)絡(luò )庫urllib。因為我們需要用到的urlopen和read方法在我的python版本中,直接引用urllib會(huì )出錯,所以一般使用這個(gè)import:import urllib.request
  提取網(wǎng)頁(yè)源代碼的整個(gè)方法如下:
  import urllib.request
def get_html(httpUrl):
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
  我們可以將這個(gè)方法打包成一個(gè)py文件,然后直接在其他py文件中導入這個(gè)方法,然后直接使用我們寫(xiě)的get_html方法。
  然后將上面得到的二進(jìn)制文件解碼成普通字符串:
  html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
  4、提取圖片地址
  從網(wǎng)頁(yè)的源代碼中提取關(guān)鍵數據時(shí),實(shí)際上是字符串匹配。如果這樣估計C++累死我了,當然我也寫(xiě)過(guò)類(lèi)似的,甚至更復雜的,真的是痛苦的回憶。
  這里推薦一個(gè)比較簡(jiǎn)單的字符串搜索和匹配程序-正則表達式,也稱(chēng)為正則表達式。(英文:Regular Expression,在代碼中??s寫(xiě)為regex、regexp或RE)
  當然,如何使用正則表達式我就不多說(shuō)了。你可以自己搜索每個(gè)視頻網(wǎng)站,看個(gè)大概就夠了,或者直接看這里——正則表達式基礎
  了解正則表達式的基本邏輯就可以了。
  進(jìn)入正題,上面的步驟已經(jīng)分析到每張圖片的原創(chuàng )地址開(kāi)頭都有一個(gè)很簡(jiǎn)單的“objURL”,所以我們正則化的關(guān)鍵就是把“objURL”后面的地址取出來(lái)。這個(gè)很簡(jiǎn)單,我直接把寫(xiě)好的正則表達式拿出來(lái):
  reg=r&#39;"objURL":"(.*?)",&#39;
  ps:字符串前的r主要是為了防止轉義字符丟失導致的字符丟失
  這個(gè)規律的作用如下:
  匹配任何以 "objURL":" 開(kāi)頭并以 ", 結尾的字符串
  然后簡(jiǎn)單地編譯這個(gè)正則(記得導入 re 包):
  import re
reg=r&#39;"objURL":"(.*?)",&#39;
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
  然后使用上面編譯的正則表達式解析第三步得到的字符串,如下:
  pic_list = reg_compile.findall(html_str)
  上面的 pic_list 是一個(gè)簡(jiǎn)單的列表
  輸出列表中的數據:
   for pic in pic_list:
print(pic)
  輸出如下:
  http://b-ssl.duitang.com/uploa ... .jpeg
http://b-ssl.duitang.com/uploa ... .jpeg
http://cdnq.duitang.com/upload ... .jpeg
http://wxpic.7399.com/nqvaoZto ... cpNpu
http://i1.hdslb.com/bfs/archiv ... 0.jpg
http://wxpic.7399.com/nqvaoZto ... cpNpu
  可以清楚的看到,有些地址不是圖片地址。這可以說(shuō)是我正則化的問(wèn)題,但也無(wú)傷大雅(其實(shí)我也懶得改了)。一點(diǎn)判斷就可以完美解決(由于所有圖片地址都以g結尾,比如png、jpg、jpeg^_^)
  for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
  完美解,w(?Д?)w
  ps:哈哈哈,這里當然是玩笑了,大家記得想好辦法改正,算是小測試,畢竟真的是無(wú)害的。
  5、下載圖片
  下載圖片也很簡(jiǎn)單。正如我開(kāi)頭所說(shuō)的,圖片實(shí)際上是存在于遠程服務(wù)器上的圖片文件。只要服務(wù)器允許,我們可以很容易的通過(guò)GET請求得到這張圖片。畢竟,瀏覽器也會(huì )這樣做。,至于你得到的,沒(méi)人管它是用來(lái)實(shí)際填網(wǎng)頁(yè)還是給自己用。
  python中下載圖片的方式有很多種,如下三種
 ?。ㄒ韵麓a不是我寫(xiě)的,不知道版本對不對,如有錯誤請自行百度。第一種在我的版本中沒(méi)有問(wèn)題):
  def urllib_download(url):
from urllib.request import urlretrieve
urlretrieve(url, &#39;1.png&#39;)

def request_download(url):
import requests
r = requests.get(url)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
f.write(r.content)

def chunk_download(url):
import requests
r = requests.get(url, stream=True)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)

  所以我們只需要下載上面列表中的每個(gè)圖片網(wǎng)址。我選擇了上面的第一個(gè)。這是urllib.request中存在的一個(gè)方法,定義如下:
  urllib.request.urlretrieve(url, filename, reporthook, data)
參數說(shuō)明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數,urllib會(huì )生成一個(gè)臨時(shí)文件來(lái)保存數據);
reporthook:是一個(gè)回調函數,當連接上服務(wù)器、以及相應的數據塊傳輸完畢的時(shí)候會(huì )觸發(fā)該回調。我們可以利用這個(gè)回調函數來(lái)顯示當前的下載進(jìn)度。
data:指post到服務(wù)器的數據。該方法返回一個(gè)包含兩個(gè)元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應頭。
  然后一個(gè)簡(jiǎn)單的循環(huán)下載就可以了:
  def download_pic(pic_adr,x):
urllib.request.urlretrieve(pic_adr, &#39;%s.jpg&#39; %x)
# &#39;./images/%s.jpg&#39;,這里也可以自己選擇創(chuàng )建一個(gè)文件吧所有圖片放進(jìn)去,而不是直接放在當前目錄下

x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
download_pic(pic,x)
x += 1
  當然需要為每張圖片選擇一個(gè)本地名稱(chēng),只需將名稱(chēng)增加1234即可。
  這樣,我們就結束了整個(gè)爬取過(guò)程。執行后效果如下:
  
  可以看到,效果還是不錯的。畢竟,只要把它放在那里,讓它自己下載。還可以考慮如何翻頁(yè)的效果。事實(shí)上,這很簡(jiǎn)單。我就講實(shí)現一個(gè)變化。關(guān)鍵詞的效果提醒大家(其實(shí)是因為我有點(diǎn)懶,不想寫(xiě)了)
  6、更改搜索關(guān)鍵詞
  看百度搜索頁(yè)面的網(wǎng)址:
  
  觀(guān)察這個(gè)網(wǎng)址,我們很容易發(fā)現原來(lái)最后一個(gè)關(guān)鍵字是關(guān)鍵詞。復制就改了,但是復制之后就不簡(jiǎn)單了:
  http://image.baidu.com/search/ ... %25A5
  為什么word變成%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
  這么一堆東西?
  很簡(jiǎn)單,因為url是ASCII碼,而這里我們用的是中文,只要稍微操作一下就可以轉:
  keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
  urllib.parse.quote 是解碼后的代碼,在最后加上關(guān)鍵字就OK了。
  簡(jiǎn)單,這個(gè)簡(jiǎn)單的python爬蟲(chóng)就完成了。.
  雖然還是想自己寫(xiě)字符串識別,但是regular真的好用。建議多學(xué)習一些常規的騷技能。
  就這樣。
  如需修改,請自行復制完整代碼并進(jìn)行更改。下載多個(gè)頁(yè)面也是很簡(jiǎn)單的操作,就不多說(shuō)了,還是可以加多線(xiàn)程,代理,動(dòng)態(tài)ip。無(wú)論如何,這就是我的第一個(gè)爬蟲(chóng)。
  完整源碼(百度圖片爬蟲(chóng))
  import urllib
import time
from urllib.request import urlretrieve
import re
import urllib.request
def get_html(httpUrl):#獲取網(wǎng)頁(yè)源碼
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
def get_keyword_urllist(keyword):#爬取當前關(guān)鍵詞下的圖片地址
keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
pic_list = reg_compile.findall(html_str)
return pic_list
keyword="栗山未來(lái)"#自己修改,或者自己寫(xiě)個(gè)input或者一個(gè)txt自己讀就完事了,甚至你寫(xiě)一個(gè)配置表,把爬取數量、爬取關(guān)鍵詞、爬取圖片大小都寫(xiě)好都可以
pic_list=get_keyword_urllist(keyword)
x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
name = keyword+str(x)
time.sleep(0.01)
urllib.request.urlretrieve(pic, &#39;./images/%s.jpg&#39; %name)
x += 1

  如果不行,請檢查收錄的模板是否正確或版本是否正確。
  重點(diǎn)
  最后運行上面的源碼,應該會(huì )發(fā)現雖然可以下載,但是下載速度太慢了。解決它需要幾秒鐘,但如果它更慢,則可能需要十秒鐘以上。
  針對這種情況,我重寫(xiě)了上面的代碼,加入了多線(xiàn)程處理,將爬取時(shí)間縮短到1s以?xún)?。我是直接上傳到我的github上的,大家可以自己下載。
  快速爬取百度圖片-爬蟲(chóng)1.0版 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(廖雪峰老師的python處理和復雜蕪雜的網(wǎng)絡(luò )框架給整崩潰了)
  說(shuō)些什么
  其實(shí)一直對python這個(gè)語(yǔ)言很感興趣,但是之前一直在做圖像處理相關(guān)的事情,所以沒(méi)怎么關(guān)注這種不能觸及底層內存處理的語(yǔ)言,但是最近才真正用上通過(guò) C++ 字符。字符串處理和復雜的網(wǎng)絡(luò )框架崩潰了,看到大家都說(shuō)python很好玩,所以趁著(zhù)最近沒(méi)事的時(shí)候學(xué)習了python。
  昨天關(guān)注了廖雪峰老師的python教程(推薦基礎教程)??戳嘶镜臄祿Y構和邏輯后,我決定直接從一個(gè)實(shí)際的小項目來(lái)實(shí)踐。最好的語(yǔ)言方式),所以就選擇了一個(gè)比較簡(jiǎn)單的python爬蟲(chóng)項目來(lái)練習。
  寫(xiě)爬蟲(chóng)最重要的就是了解我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)是什么。其實(shí)我們平時(shí)訪(fǎng)問(wèn)的網(wǎng)頁(yè)源代碼是一個(gè)字符串文件(當然也可以說(shuō)是二進(jìn)制文件)
  每次我們在瀏覽器上輸入一個(gè)網(wǎng)址,比如這個(gè)網(wǎng)址,瀏覽器會(huì )幫我們訪(fǎng)問(wèn)遠程服務(wù)器,并根據綁定的ip地址發(fā)送請求,遠程服務(wù)器會(huì )發(fā)送這個(gè)網(wǎng)頁(yè)的源代碼直接打包發(fā)送給我們的瀏覽器(html文件格式),然后我們的瀏覽器會(huì )解析這個(gè)字符串文件,比如通過(guò)div格式化和渲染網(wǎng)頁(yè),h1、h2 layouts 顯示,繼續發(fā)送請求給遠程服務(wù)器為img這些資源獲取圖片,然后在網(wǎng)頁(yè)上填寫(xiě)。
  什么是爬蟲(chóng)
  怎么說(shuō)呢,爬蟲(chóng),簡(jiǎn)單來(lái)說(shuō)就是模擬瀏覽器獲取一個(gè)網(wǎng)頁(yè)的源代碼。至于你用源代碼做什么,沒(méi)關(guān)系。
  說(shuō)的更復雜一點(diǎn),爬蟲(chóng)其實(shí)就是對所有網(wǎng)頁(yè)數據處理的綜合,比如:自動(dòng)抓取網(wǎng)頁(yè)源代碼,分析網(wǎng)頁(yè)數據,獲取關(guān)鍵數據并保存,或者自動(dòng)下載需要的網(wǎng)頁(yè)圖片、音頻,和視頻。
  那么當我們在寫(xiě)一個(gè)pythonm爬蟲(chóng)的時(shí)候,我們在寫(xiě)什么呢?
  當我們需要爬蟲(chóng)的時(shí)候,一般會(huì )遇到比較復雜的數據需求。這個(gè)要求對于手工作業(yè)來(lái)說(shuō)是非常復雜的。僅此要求就可以由爬蟲(chóng)輕松解決。
  那么首先確定我們的需求,我們需要這個(gè)爬蟲(chóng)做什么?
  比如我們認為一個(gè)教學(xué)網(wǎng)站的數據很有趣,但是它的格式太復雜,或者需要頻繁翻頁(yè),不能通過(guò)復制粘貼輕易獲取,爬蟲(chóng)就會(huì )起作用。
  總之,我們以一個(gè)爬蟲(chóng)的例子來(lái)說(shuō)明。
  爬取百度圖片ps:python版-Python 3.7.0
  第一個(gè)爬蟲(chóng)當然不能選擇太復雜的東西,涉及到很多復雜的網(wǎng)絡(luò )規則,所以我們來(lái)爬一些網(wǎng)站,簡(jiǎn)單的讓爬蟲(chóng)去爬。
  比如抓取下載關(guān)鍵詞下的某百度圖片的圖片數據。
  1、建立需求
  暫時(shí)確定以上需求,然后開(kāi)始寫(xiě)真正的爬蟲(chóng)代碼
  2、 觀(guān)察網(wǎng)頁(yè)源碼
  首先打開(kāi)百度圖片,隨意搜索一個(gè)關(guān)鍵詞。比如這次我會(huì )用我最喜歡的動(dòng)漫角色栗山未來(lái)來(lái)測試
  右鍵查看網(wǎng)頁(yè)源碼,可以看到每張圖片的原創(chuàng )地址都是以一個(gè)簡(jiǎn)單的“objURL”開(kāi)頭,以一個(gè)小逗號結尾,如下:
  
  基于此,我們可以確定爬蟲(chóng)應該如何運行。很簡(jiǎn)單——從網(wǎng)頁(yè)源碼中提取這些url并下載\(^o^)/~
  3、獲取網(wǎng)頁(yè)源碼
  其實(shí)這一步我是不想寫(xiě)的,只是擔心看了我博客剛學(xué)python的朋友可能會(huì )出錯,所以說(shuō)一下。
  首先,我們需要在python中導入網(wǎng)絡(luò )庫urllib。因為我們需要用到的urlopen和read方法在我的python版本中,直接引用urllib會(huì )出錯,所以一般使用這個(gè)import:import urllib.request
  提取網(wǎng)頁(yè)源代碼的整個(gè)方法如下:
  import urllib.request
def get_html(httpUrl):
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
  我們可以將這個(gè)方法打包成一個(gè)py文件,然后直接在其他py文件中導入這個(gè)方法,然后直接使用我們寫(xiě)的get_html方法。
  然后將上面得到的二進(jìn)制文件解碼成普通字符串:
  html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
  4、提取圖片地址
  從網(wǎng)頁(yè)的源代碼中提取關(guān)鍵數據時(shí),實(shí)際上是字符串匹配。如果這樣估計C++累死我了,當然我也寫(xiě)過(guò)類(lèi)似的,甚至更復雜的,真的是痛苦的回憶。
  這里推薦一個(gè)比較簡(jiǎn)單的字符串搜索和匹配程序-正則表達式,也稱(chēng)為正則表達式。(英文:Regular Expression,在代碼中??s寫(xiě)為regex、regexp或RE)
  當然,如何使用正則表達式我就不多說(shuō)了。你可以自己搜索每個(gè)視頻網(wǎng)站,看個(gè)大概就夠了,或者直接看這里——正則表達式基礎
  了解正則表達式的基本邏輯就可以了。
  進(jìn)入正題,上面的步驟已經(jīng)分析到每張圖片的原創(chuàng )地址開(kāi)頭都有一個(gè)很簡(jiǎn)單的“objURL”,所以我們正則化的關(guān)鍵就是把“objURL”后面的地址取出來(lái)。這個(gè)很簡(jiǎn)單,我直接把寫(xiě)好的正則表達式拿出來(lái):
  reg=r&#39;"objURL":"(.*?)",&#39;
  ps:字符串前的r主要是為了防止轉義字符丟失導致的字符丟失
  這個(gè)規律的作用如下:
  匹配任何以 "objURL":" 開(kāi)頭并以 ", 結尾的字符串
  然后簡(jiǎn)單地編譯這個(gè)正則(記得導入 re 包):
  import re
reg=r&#39;"objURL":"(.*?)",&#39;
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
  然后使用上面編譯的正則表達式解析第三步得到的字符串,如下:
  pic_list = reg_compile.findall(html_str)
  上面的 pic_list 是一個(gè)簡(jiǎn)單的列表
  輸出列表中的數據:
   for pic in pic_list:
print(pic)
  輸出如下:
  http://b-ssl.duitang.com/uploa ... .jpeg
http://b-ssl.duitang.com/uploa ... .jpeg
http://cdnq.duitang.com/upload ... .jpeg
http://wxpic.7399.com/nqvaoZto ... cpNpu
http://i1.hdslb.com/bfs/archiv ... 0.jpg
http://wxpic.7399.com/nqvaoZto ... cpNpu
  可以清楚的看到,有些地址不是圖片地址。這可以說(shuō)是我正則化的問(wèn)題,但也無(wú)傷大雅(其實(shí)我也懶得改了)。一點(diǎn)判斷就可以完美解決(由于所有圖片地址都以g結尾,比如png、jpg、jpeg^_^)
  for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
  完美解,w(?Д?)w
  ps:哈哈哈,這里當然是玩笑了,大家記得想好辦法改正,算是小測試,畢竟真的是無(wú)害的。
  5、下載圖片
  下載圖片也很簡(jiǎn)單。正如我開(kāi)頭所說(shuō)的,圖片實(shí)際上是存在于遠程服務(wù)器上的圖片文件。只要服務(wù)器允許,我們可以很容易的通過(guò)GET請求得到這張圖片。畢竟,瀏覽器也會(huì )這樣做。,至于你得到的,沒(méi)人管它是用來(lái)實(shí)際填網(wǎng)頁(yè)還是給自己用。
  python中下載圖片的方式有很多種,如下三種
 ?。ㄒ韵麓a不是我寫(xiě)的,不知道版本對不對,如有錯誤請自行百度。第一種在我的版本中沒(méi)有問(wèn)題):
  def urllib_download(url):
from urllib.request import urlretrieve
urlretrieve(url, &#39;1.png&#39;)

def request_download(url):
import requests
r = requests.get(url)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
f.write(r.content)

def chunk_download(url):
import requests
r = requests.get(url, stream=True)
with open(&#39;1.png&#39;, &#39;wb&#39;) as f:
for chunk in r.iter_content(chunk_size=32):
f.write(chunk)

  所以我們只需要下載上面列表中的每個(gè)圖片網(wǎng)址。我選擇了上面的第一個(gè)。這是urllib.request中存在的一個(gè)方法,定義如下:
  urllib.request.urlretrieve(url, filename, reporthook, data)
參數說(shuō)明:
url:外部或者本地url
filename:指定了保存到本地的路徑(如果未指定該參數,urllib會(huì )生成一個(gè)臨時(shí)文件來(lái)保存數據);
reporthook:是一個(gè)回調函數,當連接上服務(wù)器、以及相應的數據塊傳輸完畢的時(shí)候會(huì )觸發(fā)該回調。我們可以利用這個(gè)回調函數來(lái)顯示當前的下載進(jìn)度。
data:指post到服務(wù)器的數據。該方法返回一個(gè)包含兩個(gè)元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應頭。
  然后一個(gè)簡(jiǎn)單的循環(huán)下載就可以了:
  def download_pic(pic_adr,x):
urllib.request.urlretrieve(pic_adr, &#39;%s.jpg&#39; %x)
# &#39;./images/%s.jpg&#39;,這里也可以自己選擇創(chuàng )建一個(gè)文件吧所有圖片放進(jìn)去,而不是直接放在當前目錄下

x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
download_pic(pic,x)
x += 1
  當然需要為每張圖片選擇一個(gè)本地名稱(chēng),只需將名稱(chēng)增加1234即可。
  這樣,我們就結束了整個(gè)爬取過(guò)程。執行后效果如下:
  
  可以看到,效果還是不錯的。畢竟,只要把它放在那里,讓它自己下載。還可以考慮如何翻頁(yè)的效果。事實(shí)上,這很簡(jiǎn)單。我就講實(shí)現一個(gè)變化。關(guān)鍵詞的效果提醒大家(其實(shí)是因為我有點(diǎn)懶,不想寫(xiě)了)
  6、更改搜索關(guān)鍵詞
  看百度搜索頁(yè)面的網(wǎng)址:
  
  觀(guān)察這個(gè)網(wǎng)址,我們很容易發(fā)現原來(lái)最后一個(gè)關(guān)鍵字是關(guān)鍵詞。復制就改了,但是復制之后就不簡(jiǎn)單了:
  http://image.baidu.com/search/ ... %25A5
  為什么word變成%E6%A0%97%E5%B1%B1%E6%9C%AA%E6%9D%A5
  這么一堆東西?
  很簡(jiǎn)單,因為url是ASCII碼,而這里我們用的是中文,只要稍微操作一下就可以轉:
  keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
  urllib.parse.quote 是解碼后的代碼,在最后加上關(guān)鍵字就OK了。
  簡(jiǎn)單,這個(gè)簡(jiǎn)單的python爬蟲(chóng)就完成了。.
  雖然還是想自己寫(xiě)字符串識別,但是regular真的好用。建議多學(xué)習一些常規的騷技能。
  就這樣。
  如需修改,請自行復制完整代碼并進(jìn)行更改。下載多個(gè)頁(yè)面也是很簡(jiǎn)單的操作,就不多說(shuō)了,還是可以加多線(xiàn)程,代理,動(dòng)態(tài)ip。無(wú)論如何,這就是我的第一個(gè)爬蟲(chóng)。
  完整源碼(百度圖片爬蟲(chóng))
  import urllib
import time
from urllib.request import urlretrieve
import re
import urllib.request
def get_html(httpUrl):#獲取網(wǎng)頁(yè)源碼
page = urllib.request.urlopen( httpUrl )#打開(kāi)網(wǎng)頁(yè)
htmlCode = page.read( )#讀取網(wǎng)頁(yè)
return htmlCode
def get_keyword_urllist(keyword):#爬取當前關(guān)鍵詞下的圖片地址
keyword=urllib.parse.quote(keyword)
search_url="http://image.baidu.com/search/ ... ot%3B
search_url=search_url+keyword #加上關(guān)鍵字
html_code=get_html(search_url)
html_str=html_code.decode(encoding = "utf-8")#將二進(jìn)制碼解碼為utf-8編碼,即str
reg_str = r&#39;"objURL":"(.*?)",&#39; #正則表達式
reg_compile = re.compile(reg_str)
pic_list = reg_compile.findall(html_str)
return pic_list
keyword="栗山未來(lái)"#自己修改,或者自己寫(xiě)個(gè)input或者一個(gè)txt自己讀就完事了,甚至你寫(xiě)一個(gè)配置表,把爬取數量、爬取關(guān)鍵詞、爬取圖片大小都寫(xiě)好都可以
pic_list=get_keyword_urllist(keyword)
x=0
for pic in pic_list:
if pic[len(pic)-1]==&#39;g&#39;:
print(pic)
name = keyword+str(x)
time.sleep(0.01)
urllib.request.urlretrieve(pic, &#39;./images/%s.jpg&#39; %name)
x += 1

  如果不行,請檢查收錄的模板是否正確或版本是否正確。
  重點(diǎn)
  最后運行上面的源碼,應該會(huì )發(fā)現雖然可以下載,但是下載速度太慢了。解決它需要幾秒鐘,但如果它更慢,則可能需要十秒鐘以上。
  針對這種情況,我重寫(xiě)了上面的代碼,加入了多線(xiàn)程處理,將爬取時(shí)間縮短到1s以?xún)?。我是直接上傳到我的github上的,大家可以自己下載。
  快速爬取百度圖片-爬蟲(chóng)1.0版

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-19 20:02 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)
  對于網(wǎng)站webmaster來(lái)說(shuō),反爬蟲(chóng)是一項非常重要的工作——沒(méi)有人想讓爬蟲(chóng)占據超過(guò)一半的寬帶
  只有百度爬蟲(chóng)是個(gè)例外。對于站長(cháng)來(lái)說(shuō),一篇文章文章被百度收錄證明得越快,其優(yōu)化效果就越顯著(zhù)
  那么百度爬蟲(chóng)的捕獲規則是什么呢?讓我們今天來(lái)看看
  
  一、高質(zhì)量連續內容更新
  用戶(hù)和百度爬蟲(chóng)都對枯燥的內容非常感興趣,能夠持續更新并確保更新內容質(zhì)量的網(wǎng)站當然比那些多年不更新或更新原創(chuàng )內容的網(wǎng)站更具吸引力
  二、高質(zhì)量外鏈
  這是網(wǎng)站提高排名的重要一步。對于百度來(lái)說(shuō),大流量網(wǎng)站的權重必須高于小流量網(wǎng)站的權重。如果我們的網(wǎng)站外鏈是一個(gè)流量大的門(mén)戶(hù)網(wǎng)站網(wǎng)站的話(huà),通常這個(gè)門(mén)戶(hù)網(wǎng)站網(wǎng)站在百度也會(huì )有很高的權重,也就是說(shuō),它間接提高了我們自己的網(wǎng)站曝光率,增加了百度爬蟲(chóng)抓取其網(wǎng)站內容的可能性
  三、優(yōu)質(zhì)內鏈
  在構建爬蟲(chóng)捕獲矩陣(或“Web”)時(shí),除了延伸的高質(zhì)量外鏈,我們網(wǎng)站內鏈的質(zhì)量也決定了百度爬蟲(chóng)收錄的可能性和速度@文章. 百度爬蟲(chóng)將跟隨網(wǎng)站導航和網(wǎng)站內頁(yè)錨文本連接進(jìn)入網(wǎng)站內頁(yè)。簡(jiǎn)明的導航允許爬蟲(chóng)更快地找到內部頁(yè)面的錨文本。這樣,百度不僅可以接收目標頁(yè)面的內容,還可以收錄接收路徑上的所有頁(yè)面
  四、高品質(zhì)網(wǎng)站空間
  這里的“高質(zhì)量”不僅在于網(wǎng)站空間的穩定性,還在于網(wǎng)站空間足夠大,可以讓百度爬蟲(chóng)自由進(jìn)出。如果百度收錄a文章of網(wǎng)站吸引了大量流量,但大量前來(lái)訪(fǎng)問(wèn)網(wǎng)站的用戶(hù)由于網(wǎng)站空間不足而無(wú)法打開(kāi)網(wǎng)頁(yè),甚至無(wú)法打開(kāi)百度爬蟲(chóng),無(wú)疑會(huì )降低百度對該網(wǎng)站的權重分布@ 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度爬蟲(chóng)的抓取規則是怎么樣的的嗎??)
  對于網(wǎng)站webmaster來(lái)說(shuō),反爬蟲(chóng)是一項非常重要的工作——沒(méi)有人想讓爬蟲(chóng)占據超過(guò)一半的寬帶
  只有百度爬蟲(chóng)是個(gè)例外。對于站長(cháng)來(lái)說(shuō),一篇文章文章被百度收錄證明得越快,其優(yōu)化效果就越顯著(zhù)
  那么百度爬蟲(chóng)的捕獲規則是什么呢?讓我們今天來(lái)看看
  
  一、高質(zhì)量連續內容更新
  用戶(hù)和百度爬蟲(chóng)都對枯燥的內容非常感興趣,能夠持續更新并確保更新內容質(zhì)量的網(wǎng)站當然比那些多年不更新或更新原創(chuàng )內容的網(wǎng)站更具吸引力
  二、高質(zhì)量外鏈
  這是網(wǎng)站提高排名的重要一步。對于百度來(lái)說(shuō),大流量網(wǎng)站的權重必須高于小流量網(wǎng)站的權重。如果我們的網(wǎng)站外鏈是一個(gè)流量大的門(mén)戶(hù)網(wǎng)站網(wǎng)站的話(huà),通常這個(gè)門(mén)戶(hù)網(wǎng)站網(wǎng)站在百度也會(huì )有很高的權重,也就是說(shuō),它間接提高了我們自己的網(wǎng)站曝光率,增加了百度爬蟲(chóng)抓取其網(wǎng)站內容的可能性
  三、優(yōu)質(zhì)內鏈
  在構建爬蟲(chóng)捕獲矩陣(或“Web”)時(shí),除了延伸的高質(zhì)量外鏈,我們網(wǎng)站內鏈的質(zhì)量也決定了百度爬蟲(chóng)收錄的可能性和速度@文章. 百度爬蟲(chóng)將跟隨網(wǎng)站導航和網(wǎng)站內頁(yè)錨文本連接進(jìn)入網(wǎng)站內頁(yè)。簡(jiǎn)明的導航允許爬蟲(chóng)更快地找到內部頁(yè)面的錨文本。這樣,百度不僅可以接收目標頁(yè)面的內容,還可以收錄接收路徑上的所有頁(yè)面
  四、高品質(zhì)網(wǎng)站空間
  這里的“高質(zhì)量”不僅在于網(wǎng)站空間的穩定性,還在于網(wǎng)站空間足夠大,可以讓百度爬蟲(chóng)自由進(jìn)出。如果百度收錄a文章of網(wǎng)站吸引了大量流量,但大量前來(lái)訪(fǎng)問(wèn)網(wǎng)站的用戶(hù)由于網(wǎng)站空間不足而無(wú)法打開(kāi)網(wǎng)頁(yè),甚至無(wú)法打開(kāi)百度爬蟲(chóng),無(wú)疑會(huì )降低百度對該網(wǎng)站的權重分布@

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 127 次瀏覽 ? 2021-09-19 19:26 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)
  
  1.什么是爬行動(dòng)物
  爬蟲(chóng),也被稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng),是一個(gè)自動(dòng)程序或腳本運行在互聯(lián)網(wǎng)上獲取數據
  2.爬行動(dòng)物解決了什么問(wèn)題
  爬蟲(chóng)解決了獲取數據的問(wèn)題
  3.crawler抓取的數據有什么用途
  結合搜索引擎,對數據進(jìn)行分析,提取有價(jià)值的信息,得到數據的商業(yè)價(jià)值
  4.爬行動(dòng)物的簡(jiǎn)單分類(lèi)
  通用爬蟲(chóng):百度抓取互聯(lián)網(wǎng)上所有數據的爬蟲(chóng)稱(chēng)為通用爬蟲(chóng)
  垂直爬蟲(chóng):為數據分析而爬蟲(chóng)特定數據的爬蟲(chóng)稱(chēng)為垂直爬蟲(chóng)
  摘要:在互聯(lián)網(wǎng)上,大多數都是垂直爬蟲(chóng),也就是說(shuō),通過(guò)值爬蟲(chóng)來(lái)獲取一定范圍內的數據
  
  首先,以百度主頁(yè)為例,通過(guò)HTTP get獲取百度主頁(yè)的內容
  
  
  
  百度頁(yè)面源代碼
  臨時(shí)要求:
  獲取百度徽標中的大熊爪圖片鏈接
  一.enclosure-get方法
  
  
  
  經(jīng)營(yíng)成果:
  index.html
  是的,這是我們的第一個(gè)常規代碼
  通過(guò)這種方式,捕獲圖片的鏈接必須很方便
  我們將常規匹配封裝到一個(gè)函數中,然后修改代碼如下:
  
  
  只要抓住SRC=“XXXXXX”字符串,就可以抓住整個(gè)SRC鏈接,因此可以使用一個(gè)簡(jiǎn)單的正則語(yǔ)句:SRC=\“(.+?)\”
  完整代碼如下:
  
  
  “我們相信,每個(gè)人都可以成為java開(kāi)發(fā)的偉大之神。從現在開(kāi)始,找一位師兄來(lái)介紹你。在學(xué)習的過(guò)程中,你將不再迷茫。這是java開(kāi)發(fā)學(xué)院,初學(xué)者可以在這里轉行到互聯(lián)網(wǎng)行業(yè)?!?br />   "我是一名從事開(kāi)發(fā)多年的老java程序員。我辭職了,目前正在學(xué)習自己的java私人定制課程。今年年初,我花了一個(gè)月的時(shí)間整理了一個(gè)最適合2019年學(xué)習的java learning dry產(chǎn)品。我整理了從最基本的javase到spring等各種框架給每個(gè)Java合作伙伴。如果你想得到它,你可以關(guān)注我的頭條新聞,并在給我的私人信件中發(fā)布:Java,你可以免費得到它 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
java開(kāi)發(fā)修真院,初學(xué)者不再的數據有什么用和搜索引擎結合)
  
  1.什么是爬行動(dòng)物
  爬蟲(chóng),也被稱(chēng)為網(wǎng)絡(luò )爬蟲(chóng),是一個(gè)自動(dòng)程序或腳本運行在互聯(lián)網(wǎng)上獲取數據
  2.爬行動(dòng)物解決了什么問(wèn)題
  爬蟲(chóng)解決了獲取數據的問(wèn)題
  3.crawler抓取的數據有什么用途
  結合搜索引擎,對數據進(jìn)行分析,提取有價(jià)值的信息,得到數據的商業(yè)價(jià)值
  4.爬行動(dòng)物的簡(jiǎn)單分類(lèi)
  通用爬蟲(chóng):百度抓取互聯(lián)網(wǎng)上所有數據的爬蟲(chóng)稱(chēng)為通用爬蟲(chóng)
  垂直爬蟲(chóng):為數據分析而爬蟲(chóng)特定數據的爬蟲(chóng)稱(chēng)為垂直爬蟲(chóng)
  摘要:在互聯(lián)網(wǎng)上,大多數都是垂直爬蟲(chóng),也就是說(shuō),通過(guò)值爬蟲(chóng)來(lái)獲取一定范圍內的數據
  
  首先,以百度主頁(yè)為例,通過(guò)HTTP get獲取百度主頁(yè)的內容
  
  
  
  百度頁(yè)面源代碼
  臨時(shí)要求:
  獲取百度徽標中的大熊爪圖片鏈接
  一.enclosure-get方法
  
  
  
  經(jīng)營(yíng)成果:
  index.html
  是的,這是我們的第一個(gè)常規代碼
  通過(guò)這種方式,捕獲圖片的鏈接必須很方便
  我們將常規匹配封裝到一個(gè)函數中,然后修改代碼如下:
  
  
  只要抓住SRC=“XXXXXX”字符串,就可以抓住整個(gè)SRC鏈接,因此可以使用一個(gè)簡(jiǎn)單的正則語(yǔ)句:SRC=\“(.+?)\”
  完整代碼如下:
  
  
  “我們相信,每個(gè)人都可以成為java開(kāi)發(fā)的偉大之神。從現在開(kāi)始,找一位師兄來(lái)介紹你。在學(xué)習的過(guò)程中,你將不再迷茫。這是java開(kāi)發(fā)學(xué)院,初學(xué)者可以在這里轉行到互聯(lián)網(wǎng)行業(yè)?!?br />   "我是一名從事開(kāi)發(fā)多年的老java程序員。我辭職了,目前正在學(xué)習自己的java私人定制課程。今年年初,我花了一個(gè)月的時(shí)間整理了一個(gè)最適合2019年學(xué)習的java learning dry產(chǎn)品。我整理了從最基本的javase到spring等各種框架給每個(gè)Java合作伙伴。如果你想得到它,你可以關(guān)注我的頭條新聞,并在給我的私人信件中發(fā)布:Java,你可以免費得到它

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生) )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 114 次瀏覽 ? 2021-09-17 19:09 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
  Python項目中的爬蟲(chóng)應用案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生、夏雅捷主編)-抓拍百度圖片
  本文使用請求庫對網(wǎng)站圖片進(jìn)行爬網(wǎng)。前幾章中的博客介紹了如何使用urllib庫抓取網(wǎng)頁(yè)。本文主要利用請求庫對網(wǎng)頁(yè)內容進(jìn)行抓取。使用方法基本相同,但請求方法相對簡(jiǎn)單
  不要忘記爬行動(dòng)物的基本概念:
  1.指定要抓取的鏈接,然后抓取網(wǎng)站源代碼
  2.提取您想要的內容。例如,如果要對圖像信息進(jìn)行爬網(wǎng),可以選擇使用正則表達式過(guò)濾或使用提取
  標記法
  3.cycle獲取要爬網(wǎng)的內容列表并保存文件
  這里的代碼與我的博客(photo crawler series一))前幾章的區別在于:
  1.提取網(wǎng)頁(yè)使用請求庫
  2.保存圖片時(shí),后綴不是PNG或JPG,而是圖片本身的后綴
  3.不使用urllib.request.urlretrieve函數保存圖片,而是使用文件讀寫(xiě)操作保存圖片
  具體代碼如下圖所示:
  # 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { &#39;User-Agent&#39;: &#39;MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0&#39; } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = &#39;UTF-8&#39; # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, &#39;html.parser&#39;) # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all(&#39;img&#39;) x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get(&#39;src&#39;) # 排除 src=&#39;&#39; 的情況 if imgUrl_src != &#39;&#39;: print(&#39;正在下載第 %d : %s 張圖片&#39; % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = &#39;https://www.hqu.edu.cn/&#39; + imgUrl_src print(&#39;正在下載:%s&#39; % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 &#39;.jpg&#39; p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, &#39;wb&#39;).write(ir.content) x = x + 1 except: continueif __name__ == &#39;__main__&#39;: # 指定爬取圖片鏈接 url = &#39;https://www.hqu.edu.cn/index.htm&#39; # 指定存儲圖片路徑 localPath = &#39;./img/&#39; # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
  請注意,為什么在開(kāi)始時(shí)判斷圖片鏈接是否來(lái)自“HTTPS://”,主要是因為我們需要完整的絕對路徑來(lái)下載圖片,并且我們需要查看原創(chuàng )網(wǎng)頁(yè)代碼。選擇圖片,點(diǎn)擊html所在的代碼,按住鼠標查看絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖所示:
   查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(來(lái)自《Python項目案例開(kāi)發(fā)從入門(mén)到實(shí)戰》(清華大學(xué)出版社鄭秋生)
)
  Python項目中的爬蟲(chóng)應用案例開(kāi)發(fā)從入門(mén)到實(shí)戰(清華大學(xué)出版社鄭秋生、夏雅捷主編)-抓拍百度圖片
  本文使用請求庫對網(wǎng)站圖片進(jìn)行爬網(wǎng)。前幾章中的博客介紹了如何使用urllib庫抓取網(wǎng)頁(yè)。本文主要利用請求庫對網(wǎng)頁(yè)內容進(jìn)行抓取。使用方法基本相同,但請求方法相對簡(jiǎn)單
  不要忘記爬行動(dòng)物的基本概念:
  1.指定要抓取的鏈接,然后抓取網(wǎng)站源代碼
  2.提取您想要的內容。例如,如果要對圖像信息進(jìn)行爬網(wǎng),可以選擇使用正則表達式過(guò)濾或使用提取
  標記法
  3.cycle獲取要爬網(wǎng)的內容列表并保存文件
  這里的代碼與我的博客(photo crawler series一))前幾章的區別在于:
  1.提取網(wǎng)頁(yè)使用請求庫
  2.保存圖片時(shí),后綴不是PNG或JPG,而是圖片本身的后綴
  3.不使用urllib.request.urlretrieve函數保存圖片,而是使用文件讀寫(xiě)操作保存圖片
  具體代碼如下圖所示:
  # 使用requests、bs4庫下載華僑大學(xué)主頁(yè)上的所有圖片import osimport requestsfrom bs4 import BeautifulSoupimport shutilfrom pathlib import Path # 關(guān)于文件路徑操作的庫,這里主要為了得到圖片后綴名# 該方法傳入url,返回url的html的源代碼def getHtmlCode(url): # 偽裝請求的頭部來(lái)隱藏自己 headers = { &#39;User-Agent&#39;: &#39;MMozilla/5.0(Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0&#39; } # 獲取網(wǎng)頁(yè) r = requests.get(url, headers=headers) # 指定網(wǎng)頁(yè)解析的編碼格式 r.encoding = &#39;UTF-8&#39; # 獲取url頁(yè)面的源代碼字符串文本 page = r.text return page# 該方法傳入html的源代碼,通過(guò)截取其中的img標簽,將圖片保存到本機def getImg(page, localPath): # 判斷文件夾是否存在,存在則刪除,最后都要重新新的文件夾 if os.path.exists(localPath): shutil.rmtree(localPath) os.mkdir(localPath) # 按照Html格式解析頁(yè)面 soup = BeautifulSoup(page, &#39;html.parser&#39;) # 返回的是一個(gè)包含所有img標簽的列表 imgList = soup.find_all(&#39;img&#39;) x = 0 # 循環(huán)url列表 for imgUrl in imgList: try: # 得到img標簽中的src具體內容 imgUrl_src = imgUrl.get(&#39;src&#39;) # 排除 src=&#39;&#39; 的情況 if imgUrl_src != &#39;&#39;: print(&#39;正在下載第 %d : %s 張圖片&#39; % (x+1, imgUrl_src)) # 判斷圖片是否是從絕對路徑https開(kāi)始,具體為什么這樣操作可以看下圖所示 if "https://" not in imgUrl_src: m = &#39;https://www.hqu.edu.cn/&#39; + imgUrl_src print(&#39;正在下載:%s&#39; % m) # 獲取圖片 ir = requests.get(m) else: ir = requests.get(imgUrl_src) # 設置Path變量,為了使用Pahtlib庫中的方法提取后綴名 p = Path(imgUrl_src) # 得到后綴,返回的是如 &#39;.jpg&#39; p_suffix = p.suffix # 用write()方法寫(xiě)入本地文件中,存儲的后綴名用原始的后綴名稱(chēng) open(localPath + str(x) + p_suffix, &#39;wb&#39;).write(ir.content) x = x + 1 except: continueif __name__ == &#39;__main__&#39;: # 指定爬取圖片鏈接 url = &#39;https://www.hqu.edu.cn/index.htm&#39; # 指定存儲圖片路徑 localPath = &#39;./img/&#39; # 得到網(wǎng)頁(yè)源代碼 page = getHtmlCode(url) # 保存圖片 getImg(page, localPath)
  請注意,為什么在開(kāi)始時(shí)判斷圖片鏈接是否來(lái)自“HTTPS://”,主要是因為我們需要完整的絕對路徑來(lái)下載圖片,并且我們需要查看原創(chuàng )網(wǎng)頁(yè)代碼。選擇圖片,點(diǎn)擊html所在的代碼,按住鼠標查看絕對路徑,然后根據絕對路徑設置要添加的缺失部分,如下圖所示:
  

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期 )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 98 次瀏覽 ? 2021-09-17 19:06 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期
)
  在百度熱點(diǎn)新聞中,前6條在strong>A下抓取,后30條在各子欄目(國內、國際、本地、娛樂(lè )、體育等)下抓取,抓取的特征值為標簽下的mon值,C=欄目名稱(chēng),PN=各欄目下的新聞條數,12個(gè)項目顯示在一個(gè)類(lèi)別下(8個(gè)本地新聞項目),只需查看原創(chuàng )網(wǎng)頁(yè)即可
  完整代碼如下所示
  import requests
from bs4 import BeautifulSoup
import time
url=&#39;http://news.baidu.com/&#39;
res=requests.get(url)
soup = BeautifulSoup(res.text,&#39;lxml&#39;)
print(&#39;百度新聞python爬蟲(chóng)抓取&#39;)
print(&#39;頭條熱點(diǎn)新聞&#39;)
sel_a =soup.select(&#39;strong a&#39;)
for i in range(0,5):
print(sel_a[i].get_text())
print(sel_a[i].get(&#39;href&#39;))
print(&#39;熱點(diǎn)新聞&#39;)
titles_b=[]
titlew=""
for i in range(1,31):
sel_b=soup.find_all(&#39;a&#39;,mon="ct=1&a=2&c=top&pn="+str(i))
titles_b.append(sel_b[0])
for i in range(0,30):
print(titles_b[i].get_text())
print(titles_b[i].get(&#39;href&#39;))
titlew=titlew + titles_b[i].get_text() + "\n"
# 獲取當前時(shí)間
now = time.strftime(&#39;%Y-%m-%d&#39;, time.localtime(time.time()))
# 輸出到文件
with open(&#39;news&#39; + now + &#39;.txt&#39;, &#39;a&#39;, encoding=&#39;utf-8&#39;) as file:
file.write(titlew) #只輸出標題
  在瀏覽過(guò)程中,您可以直接將網(wǎng)頁(yè)下載到本地進(jìn)行調試。代碼如下:
  with open(&#39;本地文件路徑&#39;,encoding=&#39;utf-8&#39;) as f:
# print(f.read())
soup = BeautifulSoup(f,&#39;lxml&#39;) 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(《百度熱點(diǎn)新聞上》第6期
)
  在百度熱點(diǎn)新聞中,前6條在strong>A下抓取,后30條在各子欄目(國內、國際、本地、娛樂(lè )、體育等)下抓取,抓取的特征值為標簽下的mon值,C=欄目名稱(chēng),PN=各欄目下的新聞條數,12個(gè)項目顯示在一個(gè)類(lèi)別下(8個(gè)本地新聞項目),只需查看原創(chuàng )網(wǎng)頁(yè)即可
  完整代碼如下所示
  import requests
from bs4 import BeautifulSoup
import time
url=&#39;http://news.baidu.com/&#39;
res=requests.get(url)
soup = BeautifulSoup(res.text,&#39;lxml&#39;)
print(&#39;百度新聞python爬蟲(chóng)抓取&#39;)
print(&#39;頭條熱點(diǎn)新聞&#39;)
sel_a =soup.select(&#39;strong a&#39;)
for i in range(0,5):
print(sel_a[i].get_text())
print(sel_a[i].get(&#39;href&#39;))
print(&#39;熱點(diǎn)新聞&#39;)
titles_b=[]
titlew=""
for i in range(1,31):
sel_b=soup.find_all(&#39;a&#39;,mon="ct=1&a=2&c=top&pn="+str(i))
titles_b.append(sel_b[0])
for i in range(0,30):
print(titles_b[i].get_text())
print(titles_b[i].get(&#39;href&#39;))
titlew=titlew + titles_b[i].get_text() + "\n"
# 獲取當前時(shí)間
now = time.strftime(&#39;%Y-%m-%d&#39;, time.localtime(time.time()))
# 輸出到文件
with open(&#39;news&#39; + now + &#39;.txt&#39;, &#39;a&#39;, encoding=&#39;utf-8&#39;) as file:
file.write(titlew) #只輸出標題
  在瀏覽過(guò)程中,您可以直接將網(wǎng)頁(yè)下載到本地進(jìn)行調試。代碼如下:
  with open(&#39;本地文件路徑&#39;,encoding=&#39;utf-8&#39;) as f:
# print(f.read())
soup = BeautifulSoup(f,&#39;lxml&#39;)

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 119 次瀏覽 ? 2021-09-17 12:14 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)
  根據老師的指導,我昨天開(kāi)始自學(xué)爬蟲(chóng)入門(mén)
  雖然我意識到了一個(gè)相對簡(jiǎn)單的小爬蟲(chóng),但我還是很興奮。我真的很高興第一次意識到這一點(diǎn)
  起初,我想爬上pexel的墻紙,但我發(fā)現對方的網(wǎng)頁(yè)不知道設置了什么。無(wú)論如何,有一個(gè)反爬蟲(chóng)機制,我使用Python直接訪(fǎng)問(wèn)fobbiden!多么小氣的qwq
  最后,我爬上了ZOL的墻紙
  之前:
  當設計一個(gè)爬蟲(chóng)項目時(shí),我們應該首先闡明手動(dòng)瀏覽頁(yè)面以獲取大腦中圖片的步驟
  一般來(lái)說(shuō),當我們批量在線(xiàn)打開(kāi)壁紙時(shí),一般操作如下:
  1、打開(kāi)墻紙頁(yè)
  2、單擊墻紙貼圖(打開(kāi)指定墻紙的頁(yè)面)
  3、選擇分辨率(我們想下載高清圖片)
  4、save圖片
  在實(shí)際操作中,我們實(shí)現了以下步驟來(lái)訪(fǎng)問(wèn)網(wǎng)頁(yè)地址:打開(kāi)網(wǎng)頁(yè)的壁紙→ 單擊墻紙貼圖打開(kāi)指定頁(yè)面→ 選擇分辨率,單擊打開(kāi)最終保存的目標圖像的網(wǎng)頁(yè)→ 保存圖像
  在抓取過(guò)程中,我們嘗試通過(guò)模擬瀏覽器的操作來(lái)打開(kāi)網(wǎng)頁(yè),一步一步地獲取并訪(fǎng)問(wèn)網(wǎng)頁(yè),最后獲取目標圖像的下載地址,將圖像下載并保存到指定路徑
  *為了在這些中間過(guò)程中構建網(wǎng)頁(yè)的某些特定過(guò)濾條件,有必要打開(kāi)指定頁(yè)面的源代碼,觀(guān)察并找到收錄有目的鏈接的標記
  具體實(shí)施項目和說(shuō)明
  這里我只是想得到一些指定的圖片,所以我首先搜索了“昌門(mén)有喜”的網(wǎng)頁(yè),打開(kāi)了一個(gè)搜索結果頁(yè)面,發(fā)現這個(gè)頁(yè)面上還收錄了其他相同類(lèi)型的壁紙鏈接,所以我從一開(kāi)始就將我第一次訪(fǎng)問(wèn)的目的地地址設置為這個(gè)搜索結果頁(yè)面
  目標結果頁(yè)面的屏幕截圖:
  
  圖中的下標為“1/29”和“2/29”是相同類(lèi)型的其他目標壁紙。通過(guò)單擊這些圖片,我們可以打開(kāi)一個(gè)新的目標下載圖片頁(yè)面
  這里我們看一下網(wǎng)頁(yè)的源代碼
  
  圖的黃色底部是這些類(lèi)似墻紙的目標地址(訪(fǎng)問(wèn)時(shí)需要添加前綴“”)
  現在我們可以嘗試實(shí)現構建爬蟲(chóng)程序:
  打開(kāi)指定的頁(yè)面→ 過(guò)濾并獲取所有昌門(mén)優(yōu)喜壁紙的目標下載頁(yè)面鏈接
  代碼如下:
   1 from urllib import request,error
2 import re
3
4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
5
6 try:
7 response = request.urlopen(url)# 打開(kāi)頁(yè)面
8 html = response.read() #此時(shí)是byte類(lèi)型
9 html = str(html) # 轉換成字符串
10
11 pattern = re.compile(r'.*?</a>')
12 imglist = re.findall(pattern,html) # 匹配<a>標簽中的href地址
13 truelist = []
14 for item in imglist:
15 if re.match(r'^\/bizhi\/561_',item): # 觀(guān)察到所有目的地址下載頁(yè)面前綴都是/bizhi/561_,通過(guò)match函數進(jìn)行篩選
16 truelist.append(item)# 篩選掉其他無(wú)關(guān)的頁(yè)面(把真的目標頁(yè)面加到truelist列表中)
17 except error.HTTPError as e:
18 print(e.reason)
19 except error.URLError as e:
20 print(e.reason)
21 except:
22 pass
  在獲得地址后,我們可以獲得地址→ 打開(kāi)指定的頁(yè)面→ 選擇分辨率→ 獲取目標下載地址→ 保存到本地指定路徑
  在測試期間,我輸出了在信任列表的前一步中保存的內容
  
  您可以看到只保存了一個(gè)后綴。我們需要在訪(fǎng)問(wèn)時(shí)添加指定的前綴
  實(shí)施代碼(見(jiàn)***代碼):
<p> 1 # 對于每一張地址,抓取其地址并且下載到本地
2 x=0
3 for wallpaperpage in truelist:
4 try:
5 # print(wallpaperpage)
6 url1 = "http://desk.zol.com.cn" + wallpaperpage
7 response1 = request.urlopen(url1) # 打開(kāi)壁紙的頁(yè)面,相當于在瀏覽器中單擊壁紙名
8 html1 = response1.read()
9 html1 = str(html1)
10 pattern1 = re.compile(r'.*</a>')
11 urllist = re.findall(pattern1,html1) #匹配<a>標簽中的id為1920 * 1080的地址,相當于在瀏覽器中選擇1920*1080分辨率
12 html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打開(kāi)網(wǎng)頁(yè)
13
14 pattern2 = re.compile(r' 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(用python訪(fǎng)問(wèn)直接Fobbiden!真小氣qwq最后還是乖乖去爬zol上的壁紙)
  根據老師的指導,我昨天開(kāi)始自學(xué)爬蟲(chóng)入門(mén)
  雖然我意識到了一個(gè)相對簡(jiǎn)單的小爬蟲(chóng),但我還是很興奮。我真的很高興第一次意識到這一點(diǎn)
  起初,我想爬上pexel的墻紙,但我發(fā)現對方的網(wǎng)頁(yè)不知道設置了什么。無(wú)論如何,有一個(gè)反爬蟲(chóng)機制,我使用Python直接訪(fǎng)問(wèn)fobbiden!多么小氣的qwq
  最后,我爬上了ZOL的墻紙
  之前:
  當設計一個(gè)爬蟲(chóng)項目時(shí),我們應該首先闡明手動(dòng)瀏覽頁(yè)面以獲取大腦中圖片的步驟
  一般來(lái)說(shuō),當我們批量在線(xiàn)打開(kāi)壁紙時(shí),一般操作如下:
  1、打開(kāi)墻紙頁(yè)
  2、單擊墻紙貼圖(打開(kāi)指定墻紙的頁(yè)面)
  3、選擇分辨率(我們想下載高清圖片)
  4、save圖片
  在實(shí)際操作中,我們實(shí)現了以下步驟來(lái)訪(fǎng)問(wèn)網(wǎng)頁(yè)地址:打開(kāi)網(wǎng)頁(yè)的壁紙→ 單擊墻紙貼圖打開(kāi)指定頁(yè)面→ 選擇分辨率,單擊打開(kāi)最終保存的目標圖像的網(wǎng)頁(yè)→ 保存圖像
  在抓取過(guò)程中,我們嘗試通過(guò)模擬瀏覽器的操作來(lái)打開(kāi)網(wǎng)頁(yè),一步一步地獲取并訪(fǎng)問(wèn)網(wǎng)頁(yè),最后獲取目標圖像的下載地址,將圖像下載并保存到指定路徑
  *為了在這些中間過(guò)程中構建網(wǎng)頁(yè)的某些特定過(guò)濾條件,有必要打開(kāi)指定頁(yè)面的源代碼,觀(guān)察并找到收錄有目的鏈接的標記
  具體實(shí)施項目和說(shuō)明
  這里我只是想得到一些指定的圖片,所以我首先搜索了“昌門(mén)有喜”的網(wǎng)頁(yè),打開(kāi)了一個(gè)搜索結果頁(yè)面,發(fā)現這個(gè)頁(yè)面上還收錄了其他相同類(lèi)型的壁紙鏈接,所以我從一開(kāi)始就將我第一次訪(fǎng)問(wèn)的目的地地址設置為這個(gè)搜索結果頁(yè)面
  目標結果頁(yè)面的屏幕截圖:
  
  圖中的下標為“1/29”和“2/29”是相同類(lèi)型的其他目標壁紙。通過(guò)單擊這些圖片,我們可以打開(kāi)一個(gè)新的目標下載圖片頁(yè)面
  這里我們看一下網(wǎng)頁(yè)的源代碼
  
  圖的黃色底部是這些類(lèi)似墻紙的目標地址(訪(fǎng)問(wèn)時(shí)需要添加前綴“”)
  現在我們可以嘗試實(shí)現構建爬蟲(chóng)程序:
  打開(kāi)指定的頁(yè)面→ 過(guò)濾并獲取所有昌門(mén)優(yōu)喜壁紙的目標下載頁(yè)面鏈接
  代碼如下:
   1 from urllib import request,error
2 import re
3
4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
5
6 try:
7 response = request.urlopen(url)# 打開(kāi)頁(yè)面
8 html = response.read() #此時(shí)是byte類(lèi)型
9 html = str(html) # 轉換成字符串
10
11 pattern = re.compile(r'.*?</a>')
12 imglist = re.findall(pattern,html) # 匹配<a>標簽中的href地址
13 truelist = []
14 for item in imglist:
15 if re.match(r'^\/bizhi\/561_',item): # 觀(guān)察到所有目的地址下載頁(yè)面前綴都是/bizhi/561_,通過(guò)match函數進(jìn)行篩選
16 truelist.append(item)# 篩選掉其他無(wú)關(guān)的頁(yè)面(把真的目標頁(yè)面加到truelist列表中)
17 except error.HTTPError as e:
18 print(e.reason)
19 except error.URLError as e:
20 print(e.reason)
21 except:
22 pass
  在獲得地址后,我們可以獲得地址→ 打開(kāi)指定的頁(yè)面→ 選擇分辨率→ 獲取目標下載地址→ 保存到本地指定路徑
  在測試期間,我輸出了在信任列表的前一步中保存的內容
  
  您可以看到只保存了一個(gè)后綴。我們需要在訪(fǎng)問(wèn)時(shí)添加指定的前綴
  實(shí)施代碼(見(jiàn)***代碼):
<p> 1 # 對于每一張地址,抓取其地址并且下載到本地
2 x=0
3 for wallpaperpage in truelist:
4 try:
5 # print(wallpaperpage)
6 url1 = "http://desk.zol.com.cn" + wallpaperpage
7 response1 = request.urlopen(url1) # 打開(kāi)壁紙的頁(yè)面,相當于在瀏覽器中單擊壁紙名
8 html1 = response1.read()
9 html1 = str(html1)
10 pattern1 = re.compile(r'.*</a>')
11 urllist = re.findall(pattern1,html1) #匹配<a>標簽中的id為1920 * 1080的地址,相當于在瀏覽器中選擇1920*1080分辨率
12 html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打開(kāi)網(wǎng)頁(yè)
13
14 pattern2 = re.compile(r'

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼 )

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 105 次瀏覽 ? 2021-09-16 06:16 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼
)
  最近,我在互聯(lián)網(wǎng)上看到了文章爬蟲(chóng)的引入。我覺(jué)得很有趣。搬家總比搬家好。晚上回來(lái)的時(shí)間只是用來(lái)編碼的~~
  網(wǎng)絡(luò )爬蟲(chóng):根據一定的規則對網(wǎng)頁(yè)上的信息進(jìn)行爬網(wǎng),通常先爬網(wǎng)到一些URL,然后將這些URL放入隊列中進(jìn)行反復搜索。我不知道是DFS還是BFS。我在這里不研究算法,因為爬蟲(chóng)示例相對簡(jiǎn)單。我實(shí)現了一個(gè)java小程序來(lái)抓取百度頁(yè)面的徽標
  事實(shí)上,爬蟲(chóng)的作用遠遠大于此。此示例僅供介紹性參考
  首先,讓我們分析一下,在本例中,抓取圖片的過(guò)程只不過(guò)是以下步驟:
  1.訪(fǎng)問(wèn)百度主頁(yè)獲取網(wǎng)頁(yè)返回的信息
  2.get有用信息(這里是網(wǎng)頁(yè)的源代碼或所有圖片的URL)
  3.訪(fǎng)問(wèn)所有圖片的URL
  4.可以以流的形式本地存儲
  通過(guò)以上步驟,很容易編寫(xiě)一個(gè)簡(jiǎn)單的爬蟲(chóng)程序。下面是代碼中帶有注釋的代碼
<p>import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Bug {
String url = "http://www.baidu.com";//待爬取的URL
//獲取url頁(yè)面的源碼;
public String ClimbBug() throws IOException{
URL accessurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) accessurl.openConnection();
conn.connect();//連接
InputStream is = null;
if(conn.getResponseCode()==200){//判斷狀態(tài)嗎是否為200,正常的話(huà)獲取返回信息
byte[] b=new byte[4096];
is = conn.getInputStream();
StringBuilder sb = new StringBuilder();
int len=0;
while((len=is.read(b))!=-1){
sb.append(new String(b,0,len,"UTF-8"));
}
return sb.toString();//返回百度頁(yè)面源代碼,這里跟網(wǎng)頁(yè)上右鍵查看源代碼的效果一致
}
return "Error";
}
//獲取圖片頁(yè)面URL
public List regex() throws IOException{
System.out.println(new Bug().ClimbBug());
String regex = "src[\\s\\S]*?>";//匹配所有圖片的URL
List list = new ArrayList();
Matcher p = Pattern.compile(regex).matcher(new Bug().ClimbBug());
while(p.find()){
list.add(p.group());
}//匹配到放入我們的URLlist
return list;
}
//下載圖片到本地或者結合數據庫做其他想做的操作;
public void download(List list) throws IOException{
InputStream is =null;
OutputStream os =null;
for (int i=0;i 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(本次做的爬蟲(chóng)實(shí)例比較簡(jiǎn)單,晚上回來(lái)的時(shí)間用來(lái)碼代碼
)
  最近,我在互聯(lián)網(wǎng)上看到了文章爬蟲(chóng)的引入。我覺(jué)得很有趣。搬家總比搬家好。晚上回來(lái)的時(shí)間只是用來(lái)編碼的~~
  網(wǎng)絡(luò )爬蟲(chóng):根據一定的規則對網(wǎng)頁(yè)上的信息進(jìn)行爬網(wǎng),通常先爬網(wǎng)到一些URL,然后將這些URL放入隊列中進(jìn)行反復搜索。我不知道是DFS還是BFS。我在這里不研究算法,因為爬蟲(chóng)示例相對簡(jiǎn)單。我實(shí)現了一個(gè)java小程序來(lái)抓取百度頁(yè)面的徽標
  事實(shí)上,爬蟲(chóng)的作用遠遠大于此。此示例僅供介紹性參考
  首先,讓我們分析一下,在本例中,抓取圖片的過(guò)程只不過(guò)是以下步驟:
  1.訪(fǎng)問(wèn)百度主頁(yè)獲取網(wǎng)頁(yè)返回的信息
  2.get有用信息(這里是網(wǎng)頁(yè)的源代碼或所有圖片的URL)
  3.訪(fǎng)問(wèn)所有圖片的URL
  4.可以以流的形式本地存儲
  通過(guò)以上步驟,很容易編寫(xiě)一個(gè)簡(jiǎn)單的爬蟲(chóng)程序。下面是代碼中帶有注釋的代碼
<p>import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Bug {
String url = "http://www.baidu.com";//待爬取的URL
//獲取url頁(yè)面的源碼;
public String ClimbBug() throws IOException{
URL accessurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) accessurl.openConnection();
conn.connect();//連接
InputStream is = null;
if(conn.getResponseCode()==200){//判斷狀態(tài)嗎是否為200,正常的話(huà)獲取返回信息
byte[] b=new byte[4096];
is = conn.getInputStream();
StringBuilder sb = new StringBuilder();
int len=0;
while((len=is.read(b))!=-1){
sb.append(new String(b,0,len,"UTF-8"));
}
return sb.toString();//返回百度頁(yè)面源代碼,這里跟網(wǎng)頁(yè)上右鍵查看源代碼的效果一致
}
return "Error";
}
//獲取圖片頁(yè)面URL
public List regex() throws IOException{
System.out.println(new Bug().ClimbBug());
String regex = "src[\\s\\S]*?>";//匹配所有圖片的URL
List list = new ArrayList();
Matcher p = Pattern.compile(regex).matcher(new Bug().ClimbBug());
while(p.find()){
list.add(p.group());
}//匹配到放入我們的URLlist
return list;
}
//下載圖片到本地或者結合數據庫做其他想做的操作;
public void download(List list) throws IOException{
InputStream is =null;
OutputStream os =null;
for (int i=0;i

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 88 次瀏覽 ? 2021-09-16 06:14 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
  什么是爬行動(dòng)物
  網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在FOAF社區中更常被稱(chēng)為網(wǎng)絡(luò )追蹤器)是一種程序或腳本,根據特定規則自動(dòng)獲取萬(wàn)維網(wǎng)信息。其他不常用的名稱(chēng)包括螞蟻、自動(dòng)索引、模擬器或蠕蟲(chóng)。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)協(xié)議
  robots協(xié)議(也稱(chēng)為crawler協(xié)議、robot協(xié)議等)的全稱(chēng)為“robots exclusion protocol”,網(wǎng)站通過(guò)該協(xié)議,robots協(xié)議告訴搜索引擎哪些頁(yè)面可以爬網(wǎng),哪些頁(yè)面不能爬網(wǎng)
  robots.txt文件是一個(gè)文本文件。您可以使用任何通用文本編輯器(如Windows系統附帶的記事本)創(chuàng )建和編輯它。Robots.txt是一個(gè)協(xié)議,不是命令。Robots.txt是在搜索引擎中訪(fǎng)問(wèn)網(wǎng)站時(shí)查看的第一個(gè)文件。txt文件告訴爬行器可以在服務(wù)器上查看哪些文件。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)百度圖片
  目標:抓取百度圖片并保存在電腦上
  首先,數據是公開(kāi)的嗎?我可以下載嗎
  從圖中可以看出,百度圖片完全可以下載,說(shuō)明圖片可以爬網(wǎng)
  首先,了解圖片是什么
  我們看到的正式事物統稱(chēng)為圖片、照片、拓片等。圖形是技術(shù)制圖中的一個(gè)基本術(shù)語(yǔ),指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述事物的幾何特征、形狀、位置和大小的一種形式。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖像以數字形式存儲
  那照片在哪里
  映像保存在ECS數據庫中
  每張圖片都有一個(gè)對應的URL。請求通過(guò)請求模塊啟動(dòng),并以文件的WB+模式保存
  import requests
r = requests.get(&#x27;http://pic37.nipic.com/2014011 ... 23x27;)
with open(&#x27;demo.jpg&#x27;,&#x27;wb+&#x27;) as f:
f.write(r.content)
  但是任何編寫(xiě)代碼來(lái)爬升圖片的人都可以直接下載。爬蟲(chóng)的目的是實(shí)現批量下載的目的,這才是真正的爬蟲(chóng)
  首先,了解JSON
  JSON(JavaScript對象表示法)是一種輕量級數據交換格式。它基于ECMAScript(由歐洲計算機協(xié)會(huì )制定的JS規范)的子集,并使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔清晰的層次結構使JSON成為理想的數據交換語(yǔ)言
  JSON是JS的對象,用于訪(fǎng)問(wèn)數據
  JSON字符串
  {
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
  Python字典
  {
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
  但是在Python中,不能通過(guò)鍵值對直接獲取值,因此我必須討論Python中的字典
  在Python中導入JSON,并通過(guò)JSON將JSON數據轉換為Python數據(字典)。裝載量-->
  Ajax,即“異步JavaScript和XML”,是指一種用于創(chuàng )建交互式網(wǎng)頁(yè)應用程序的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
  圖片是通過(guò)Ajax方法加載的,也就是說(shuō),當我下拉時(shí),圖片會(huì )自動(dòng)加載,因為網(wǎng)站會(huì )自動(dòng)啟動(dòng)請求
  構造Ajax的URL請求,將JSON轉換成字典,通過(guò)字典的鍵值對得到圖片對應的URL
  import requests
import json
headers = {
&#x27;User-Agent&#x27;:&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
r = requests.get(&#x27;https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)[&#x27;data&#x27;]
for index,i in enumerate(res):
url = i[&#x27;hoverURL&#x27;]
print(url)
with open( &#x27;{}.jpg&#x27;.format(index),&#x27;wb+&#x27;) as f:
f.write(requests.get(url).content)
  一個(gè)JSON中有30張圖片,因此我們可以通過(guò)啟動(dòng)JSON請求來(lái)提升多達30張圖片,但這還不夠
  首先,分析在不同JSON中啟動(dòng)的請求
  https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
  事實(shí)上,可以發(fā)現,當請求再次啟動(dòng)時(shí),關(guān)鍵是PN不斷變化
  最后,封裝代碼。一個(gè)列表定義生產(chǎn)者來(lái)存儲不斷生成的圖片的URL,另一個(gè)列表定義消費者來(lái)保存圖片
  # -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
&#x27;User-Agent&#x27;: &#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
for i in range(num):
page_url = &#x27;https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290=&#x27;.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)[&#x27;data&#x27;]
if res:
print(res)
for j in res:
try:
url = j[&#x27;hoverURL&#x27;]
pic_url.append(url)
except:
print(&#x27;該圖片的url不存在&#x27;)
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists(&#x27;D:\圖片&#x27;):
pass
else:
os.makedirs(&#x27;D:\圖片&#x27;)
path = &#x27;D:\圖片\\&#x27;
for index,i in enumerate(pic_url):
filename = path + str(index) + &#x27;.jpg&#x27;
print(filename)
with open(filename, &#x27;wb+&#x27;) as f:
f.write(requests.get(i).content)
if __name__ == &#x27;__main__&#x27;:
num = int(input(&#x27;爬取幾次圖片:一次30張&#x27;))
down_img(num)
  爬行過(guò)程
  爬網(wǎng)結果
  文章開(kāi)始于: 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(什么是爬蟲(chóng)網(wǎng)絡(luò )爬蟲(chóng)(又被稱(chēng)為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò )機器人))
  什么是爬行動(dòng)物
  網(wǎng)絡(luò )爬蟲(chóng)(也稱(chēng)為網(wǎng)絡(luò )蜘蛛、網(wǎng)絡(luò )機器人,在FOAF社區中更常被稱(chēng)為網(wǎng)絡(luò )追蹤器)是一種程序或腳本,根據特定規則自動(dòng)獲取萬(wàn)維網(wǎng)信息。其他不常用的名稱(chēng)包括螞蟻、自動(dòng)索引、模擬器或蠕蟲(chóng)。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)協(xié)議
  robots協(xié)議(也稱(chēng)為crawler協(xié)議、robot協(xié)議等)的全稱(chēng)為“robots exclusion protocol”,網(wǎng)站通過(guò)該協(xié)議,robots協(xié)議告訴搜索引擎哪些頁(yè)面可以爬網(wǎng),哪些頁(yè)面不能爬網(wǎng)
  robots.txt文件是一個(gè)文本文件。您可以使用任何通用文本編輯器(如Windows系統附帶的記事本)創(chuàng )建和編輯它。Robots.txt是一個(gè)協(xié)議,不是命令。Robots.txt是在搜索引擎中訪(fǎng)問(wèn)網(wǎng)站時(shí)查看的第一個(gè)文件。txt文件告訴爬行器可以在服務(wù)器上查看哪些文件。(來(lái)源:百度百科全書(shū))
  爬蟲(chóng)百度圖片
  目標:抓取百度圖片并保存在電腦上
  首先,數據是公開(kāi)的嗎?我可以下載嗎
  從圖中可以看出,百度圖片完全可以下載,說(shuō)明圖片可以爬網(wǎng)
  首先,了解圖片是什么
  我們看到的正式事物統稱(chēng)為圖片、照片、拓片等。圖形是技術(shù)制圖中的一個(gè)基本術(shù)語(yǔ),指用點(diǎn)、線(xiàn)、符號、文字和數字來(lái)描述事物的幾何特征、形狀、位置和大小的一種形式。隨著(zhù)數字采集技術(shù)和信號處理理論的發(fā)展,越來(lái)越多的圖像以數字形式存儲
  那照片在哪里
  映像保存在ECS數據庫中
  每張圖片都有一個(gè)對應的URL。請求通過(guò)請求模塊啟動(dòng),并以文件的WB+模式保存
  import requests
r = requests.get(&#x27;http://pic37.nipic.com/2014011 ... 23x27;)
with open(&#x27;demo.jpg&#x27;,&#x27;wb+&#x27;) as f:
f.write(r.content)
  但是任何編寫(xiě)代碼來(lái)爬升圖片的人都可以直接下載。爬蟲(chóng)的目的是實(shí)現批量下載的目的,這才是真正的爬蟲(chóng)
  首先,了解JSON
  JSON(JavaScript對象表示法)是一種輕量級數據交換格式。它基于ECMAScript(由歐洲計算機協(xié)會(huì )制定的JS規范)的子集,并使用完全獨立于編程語(yǔ)言的文本格式來(lái)存儲和表示數據。簡(jiǎn)潔清晰的層次結構使JSON成為理想的數據交換語(yǔ)言
  JSON是JS的對象,用于訪(fǎng)問(wèn)數據
  JSON字符串
  {
“name”: “毛利”,
“age”: 18,
“ feature “ : [‘高’, ‘富’, ‘帥’]
}
  Python字典
  {
‘name’: ‘毛利’,
‘a(chǎn)ge’: 18
‘feature’ : [‘高’, ‘富’, ‘帥’]
}
  但是在Python中,不能通過(guò)鍵值對直接獲取值,因此我必須討論Python中的字典
  在Python中導入JSON,并通過(guò)JSON將JSON數據轉換為Python數據(字典)。裝載量-->
  Ajax,即“異步JavaScript和XML”,是指一種用于創(chuàng )建交互式網(wǎng)頁(yè)應用程序的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
  圖片是通過(guò)Ajax方法加載的,也就是說(shuō),當我下拉時(shí),圖片會(huì )自動(dòng)加載,因為網(wǎng)站會(huì )自動(dòng)啟動(dòng)請求
  構造Ajax的URL請求,將JSON轉換成字典,通過(guò)字典的鍵值對得到圖片對應的URL
  import requests
import json
headers = {
&#x27;User-Agent&#x27;:&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
r = requests.get(&#x27;https://image.baidu.com/search ... 27%3B,headers = headers).text
res = json.loads(r)[&#x27;data&#x27;]
for index,i in enumerate(res):
url = i[&#x27;hoverURL&#x27;]
print(url)
with open( &#x27;{}.jpg&#x27;.format(index),&#x27;wb+&#x27;) as f:
f.write(requests.get(url).content)
  一個(gè)JSON中有30張圖片,因此我們可以通過(guò)啟動(dòng)JSON請求來(lái)提升多達30張圖片,但這還不夠
  首先,分析在不同JSON中啟動(dòng)的請求
  https://image.baidu.com/search ... 55%3D
https://image.baidu.com/search ... 90%3D
  事實(shí)上,可以發(fā)現,當請求再次啟動(dòng)時(shí),關(guān)鍵是PN不斷變化
  最后,封裝代碼。一個(gè)列表定義生產(chǎn)者來(lái)存儲不斷生成的圖片的URL,另一個(gè)列表定義消費者來(lái)保存圖片
  # -*- coding:utf-8 -*-
# time :2019/6/20 17:07
# author: 毛利
import requests
import json
import os
def get_pic_url(num):
pic_url= []
headers = {
&#x27;User-Agent&#x27;: &#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36&#x27;}
for i in range(num):
page_url = &#x27;https://image.baidu.com/search ... pn%3D{}&rn=30&gsm=1e&1561022599290=&#x27;.format(30*i)
r = requests.get(page_url, headers=headers).text
res = json.loads(r)[&#x27;data&#x27;]
if res:
print(res)
for j in res:
try:
url = j[&#x27;hoverURL&#x27;]
pic_url.append(url)
except:
print(&#x27;該圖片的url不存在&#x27;)
print(len(pic_url))
return pic_url
def down_img(num):
pic_url =get_pic_url(num)
if os.path.exists(&#x27;D:\圖片&#x27;):
pass
else:
os.makedirs(&#x27;D:\圖片&#x27;)
path = &#x27;D:\圖片\\&#x27;
for index,i in enumerate(pic_url):
filename = path + str(index) + &#x27;.jpg&#x27;
print(filename)
with open(filename, &#x27;wb+&#x27;) as f:
f.write(requests.get(i).content)
if __name__ == &#x27;__main__&#x27;:
num = int(input(&#x27;爬取幾次圖片:一次30張&#x27;))
down_img(num)
  爬行過(guò)程
  爬網(wǎng)結果
  文章開(kāi)始于:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( ,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 90 次瀏覽 ? 2021-09-16 06:11 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)
  Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法
  更新時(shí)間:2015年7月24日09:36:05作者:fzhlee
  本文文章主要介紹了用Java-crawler捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法,并結合實(shí)例分析了Java-crawler的兩種實(shí)現技巧,具有一定的參考價(jià)值。有需要的朋友可以參考
  本文描述了在Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法。與您分享,供您參考。詳情如下:
  最近,我在用java學(xué)習爬行技術(shù)。哈哈,我進(jìn)門(mén)和你分享了我的經(jīng)歷
  提供以下兩種方法。一種是使用Apache提供的包。另一個(gè)是使用Java提供的包
  代碼如下:
<p>
// 第一種方法
//這種方法是用apache提供的包,簡(jiǎn)單方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 將表單的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是帶參數抓取,我自己把它注銷(xiāo)了.大家可以把注銷(xiāo)消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//這里要注意下 gb2312要和你抓取網(wǎng)頁(yè)的編碼要一樣
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉網(wǎng)頁(yè)中帶有html語(yǔ)言的標簽
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二種方法
// 這種方法是JAVA自帶的URL來(lái)抓取網(wǎng)站內容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 讀取結果網(wǎng)頁(yè)
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的額外數據
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 讀取內容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
,實(shí)例分析了java爬蟲(chóng)的兩種實(shí)現技巧具有一定參考借鑒價(jià)值)
  Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法
  更新時(shí)間:2015年7月24日09:36:05作者:fzhlee
  本文文章主要介紹了用Java-crawler捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法,并結合實(shí)例分析了Java-crawler的兩種實(shí)現技巧,具有一定的參考價(jià)值。有需要的朋友可以參考
  本文描述了在Java中使用爬蟲(chóng)捕獲網(wǎng)站網(wǎng)頁(yè)內容的方法。與您分享,供您參考。詳情如下:
  最近,我在用java學(xué)習爬行技術(shù)。哈哈,我進(jìn)門(mén)和你分享了我的經(jīng)歷
  提供以下兩種方法。一種是使用Apache提供的包。另一個(gè)是使用Java提供的包
  代碼如下:
<p>
// 第一種方法
//這種方法是用apache提供的包,簡(jiǎn)單方便
//但是要用到以下包:commons-codec-1.4.jar
// commons-httpclient-3.1.jar
// commons-logging-1.0.4.jar
public static String createhttpClient(String url, String param) {
HttpClient client = new HttpClient();
String response = null;
String keyword = null;
PostMethod postMethod = new PostMethod(url);
// try {
// if (param != null)
// keyword = new String(param.getBytes("gb2312"), "ISO-8859-1");
// } catch (UnsupportedEncodingException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
// NameValuePair[] data = { new NameValuePair("keyword", keyword) };
// // 將表單的值放入postMethod中
// postMethod.setRequestBody(data);
// 以上部分是帶參數抓取,我自己把它注銷(xiāo)了.大家可以把注銷(xiāo)消掉研究下
try {
int statusCode = client.executeMethod(postMethod);
response = new String(postMethod.getResponseBodyAsString()
.getBytes("ISO-8859-1"), "gb2312");
//這里要注意下 gb2312要和你抓取網(wǎng)頁(yè)的編碼要一樣
String p = response.replaceAll("//&[a-zA-Z]{1,10};", "")
.replaceAll("]*>", "");//去掉網(wǎng)頁(yè)中帶有html語(yǔ)言的標簽
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
// 第二種方法
// 這種方法是JAVA自帶的URL來(lái)抓取網(wǎng)站內容
public String getPageContent(String strUrl, String strPostRequest,
int maxLength) {
// 讀取結果網(wǎng)頁(yè)
StringBuffer buffer = new StringBuffer();
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
System.setProperty("sun.net.client.defaultReadTimeout", "5000");
try {
URL newUrl = new URL(strUrl);
HttpURLConnection hConnect = (HttpURLConnection) newUrl
.openConnection();
// POST方式的額外數據
if (strPostRequest.length() > 0) {
hConnect.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(hConnect
.getOutputStream());
out.write(strPostRequest);
out.flush();
out.close();
}
// 讀取內容
BufferedReader rd = new BufferedReader(new InputStreamReader(
hConnect.getInputStream()));
int ch;
for (int length = 0; (ch = rd.read()) > -1
&& (maxLength

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2021-09-10 11:07 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助,也希望多多支持服務(wù)器之家!
  原文鏈接: 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取爬蟲(chóng)爬蟲(chóng)措施的靜態(tài)網(wǎng)站().7點(diǎn))
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助,也希望多多支持服務(wù)器之家!
  原文鏈接:

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 2017年02月17日09:58:cong框架sublimetext3)

網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 85 次瀏覽 ? 2021-09-10 11:06 ? 來(lái)自相關(guān)話(huà)題

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
2017年02月17日09:58:cong框架sublimetext3)
  Python爬蟲(chóng):通過(guò)關(guān)鍵詞抓取百度圖片
  更新時(shí)間:2017年2月17日09:58:19 作者:WC-cong
  本文主要介紹Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片的方法。有很好的參考價(jià)值,下面小編一起來(lái)看看吧
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助。同時(shí)也希望大家多多支持腳本之家! 查看全部

  網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
2017年02月17日09:58:cong框架sublimetext3)
  Python爬蟲(chóng):通過(guò)關(guān)鍵詞抓取百度圖片
  更新時(shí)間:2017年2月17日09:58:19 作者:WC-cong
  本文主要介紹Python爬蟲(chóng):通過(guò)關(guān)鍵字爬取百度圖片的方法。有很好的參考價(jià)值,下面小編一起來(lái)看看吧
  使用工具:Python2.7點(diǎn)我下載
  Scrapy 框架
  sublime text3
  一個(gè)。構建python(Windows版)
  1.Install python2.7 --- 然后在cmd中輸入python,界面如下,安裝成功
  
  2.Integrated Scrapy framework----進(jìn)入命令行:pip install Scrapy
  
  安裝成功界面如下:
  
  失敗有很多,例如:
  
  解決方案:
  其他錯誤可以百度搜索。
  兩個(gè)。開(kāi)始編程。
  1.Crawl static 網(wǎng)站 沒(méi)有反爬蟲(chóng)措施。比如百度貼吧、豆瓣書(shū)樹(shù)。
  例如-“桌面欄”中的帖子
  python代碼如下:
  
  代碼注釋?zhuān)阂雰蓚€(gè)模塊urllib。定義了兩個(gè)函數。第一個(gè)功能是獲取整個(gè)目標網(wǎng)頁(yè)的數據,第二個(gè)功能是獲取目標網(wǎng)頁(yè)中的目標圖片,遍歷網(wǎng)頁(yè),開(kāi)始按照0對獲取的圖片進(jìn)行排序。
  注:re模塊知識點(diǎn):
  
  爬行圖片效果圖:
  
  默認情況下,圖片保存路徑與創(chuàng )建的.py在同一個(gè)目錄文件中。
  2. 用反爬蟲(chóng)措施抓取百度圖片。比如百度圖片等等。
  例如關(guān)鍵字搜索“表情包”%B1%ED%C7%E9%B0%FC&fr=ala&ori_query=%E8%A1%A8%E6%83%85%E5%8C%85&ala=0&alatpl=sp&pos= 0&hs =2&xthttps=111111
  圖片滾動(dòng)加載,前30張圖片先爬取。
  代碼如下:
  
  代碼注釋?zhuān)簩?個(gè)模塊,os模塊用于指定保存路徑。前兩個(gè)功能同上。第三個(gè)函數使用 if 語(yǔ)句和 tryException。
  抓取過(guò)程如下:
  
  抓取結果:
  
  注意:寫(xiě)python代碼時(shí)注意對齊,不能混用Tab和空格,容易報錯。
  以上是本文的全部?jì)热?。希望本文的內容能給大家的學(xué)習或工作帶來(lái)一些幫助。同時(shí)也希望大家多多支持腳本之家!

官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

最近中文字幕2019高清,亚洲人成高清在线播放,男生淦哭男生图片动漫有字,国产亚洲精品九九久在线观看,无码av专区丝袜专区