
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-03-15 00:00
)
網(wǎng)絡(luò )爬蟲(chóng)主要分為4大板塊:
分析具有明確目標的網(wǎng)頁(yè)結構,
在網(wǎng)頁(yè)中查找信息的地址,
抓取信息,
保存信息
以下以網(wǎng)絡(luò )爬蟲(chóng)抓取百度圖片貓的圖片為例進(jìn)行演示
項目案例:
爬取百度所有狗圖片網(wǎng)站
步驟分析:第一步:明確目標,我們將百度的狗圖片作為目標爬取,分析網(wǎng)頁(yè)結構
1、輸入以下網(wǎng)址
^00_1583X672&word=狗
2、選擇下一頁(yè)時(shí),只有pn和gsm值發(fā)生了變化。
到目前為止,我所知道的是:pn參數代表頁(yè)數; word參數自然是關(guān)鍵詞,需要轉換編碼格式。
gsm 的值,隨意更改似乎沒(méi)有任何作用。有句話(huà)說(shuō)gsm:代表pn的十六進(jìn)制值
3、可以拼接出頁(yè)面請求的URL,代碼如下
import sys
import urllib
import requests
def getPage(keyword, page, n):
page = page * n
keyword = urllib.parse.quote(keyword, safe='/')
url_begin = "http://image.baidu.com/search/ ... ot%3B
url = url_begin + keyword + "&pn=" + str(page) + "&gsm=" + str(hex(page)) + "&ct=&ic=0&lm=-1&width=0&height=0"
return url
第二步:在網(wǎng)頁(yè)中查找圖片地址
1、右鍵查看網(wǎng)頁(yè)源代碼,分析JSON數據可以看到objURL字段代表原圖的下載路徑
2、根據URL地址,獲取圖片地址的代碼為:
def get_onepage_urls(onepageurl):
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
return pic_urls
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
return pic_urls
三、爬取圖片并保存
def down_pic(pic_urls):
"""給出圖片鏈接列表, 下載所有圖片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = 'data2/'+str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下載第%s張圖片時(shí)失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
四、調用函數
if __name__ == '__main__':
keyword = '狗' # 關(guān)鍵詞, 改為你想輸入的詞即可, 相當于在百度圖片里搜索一樣
page_begin = 0
page_number = 30
image_number = 3
all_pic_urls = []
while 1:
if page_begin > image_number:
break
print("第%d次請求數據", [page_begin])
url = getPage(keyword, page_begin, page_number)
onepage_urls = get_onepage_urls(url)
page_begin += 1
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖)
)
網(wǎng)絡(luò )爬蟲(chóng)主要分為4大板塊:
分析具有明確目標的網(wǎng)頁(yè)結構,
在網(wǎng)頁(yè)中查找信息的地址,
抓取信息,
保存信息
以下以網(wǎng)絡(luò )爬蟲(chóng)抓取百度圖片貓的圖片為例進(jìn)行演示
項目案例:
爬取百度所有狗圖片網(wǎng)站
步驟分析:第一步:明確目標,我們將百度的狗圖片作為目標爬取,分析網(wǎng)頁(yè)結構
1、輸入以下網(wǎng)址
^00_1583X672&word=狗

2、選擇下一頁(yè)時(shí),只有pn和gsm值發(fā)生了變化。


到目前為止,我所知道的是:pn參數代表頁(yè)數; word參數自然是關(guān)鍵詞,需要轉換編碼格式。
gsm 的值,隨意更改似乎沒(méi)有任何作用。有句話(huà)說(shuō)gsm:代表pn的十六進(jìn)制值
3、可以拼接出頁(yè)面請求的URL,代碼如下
import sys
import urllib
import requests
def getPage(keyword, page, n):
page = page * n
keyword = urllib.parse.quote(keyword, safe='/')
url_begin = "http://image.baidu.com/search/ ... ot%3B
url = url_begin + keyword + "&pn=" + str(page) + "&gsm=" + str(hex(page)) + "&ct=&ic=0&lm=-1&width=0&height=0"
return url
第二步:在網(wǎng)頁(yè)中查找圖片地址
1、右鍵查看網(wǎng)頁(yè)源代碼,分析JSON數據可以看到objURL字段代表原圖的下載路徑

2、根據URL地址,獲取圖片地址的代碼為:
def get_onepage_urls(onepageurl):
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
return pic_urls
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
return pic_urls
三、爬取圖片并保存
def down_pic(pic_urls):
"""給出圖片鏈接列表, 下載所有圖片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = 'data2/'+str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下載第%s張圖片時(shí)失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
四、調用函數
if __name__ == '__main__':
keyword = '狗' # 關(guān)鍵詞, 改為你想輸入的詞即可, 相當于在百度圖片里搜索一樣
page_begin = 0
page_number = 30
image_number = 3
all_pic_urls = []
while 1:
if page_begin > image_number:
break
print("第%d次請求數據", [page_begin])
url = getPage(keyword, page_begin, page_number)
onepage_urls = get_onepage_urls(url)
page_begin += 1
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(怎么老是靜不下心來(lái)心來(lái)搞定一方面的技術(shù),再學(xué)點(diǎn)其他的東西)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 60 次瀏覽 ? 2022-03-12 03:11
我對xmfdsh真的很感興趣,為什么不能靜下心來(lái)搞定一個(gè)方面的技術(shù),然后再學(xué)習其他的東西,一步一步來(lái),好吧,我又要去學(xué)習網(wǎng)絡(luò )爬蟲(chóng)了,這是一個(gè)簡(jiǎn)單的版本,參考網(wǎng)上很多資料,用C#寫(xiě)的,專(zhuān)門(mén)抓圖,可以抓一些需要cookies的網(wǎng)站,所以功能還是挺全的,xmfdsh才研究了三天,所以有仍有很大的改進(jìn)空間。我會(huì )慢慢改進(jìn)的。我將在本文末尾附上整個(gè)項目。獻給喜歡學(xué)習C#的朋友。讓我慢慢說(shuō):
#region 訪(fǎng)問(wèn)數據 + Request(int index)
///
/// 訪(fǎng)問(wèn)數據
///
private void Request(int index)
{
try
{
int depth;
string url = "";
//lock鎖住Dictionary,因為Dictionary多線(xiàn)程會(huì )出錯
lock (_locker)
{
//查看是否還存在未下載的鏈接
if (UnDownLoad.Count 0)
{
MemoryStream ms = new System.IO.MemoryStream(rs.Data, 0, read);
BinaryReader reader = new BinaryReader(ms);
byte[] buffer = new byte[32 * 1024];
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
rs.memoryStream.Write(buffer, 0, read);
}
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
else
{
read = responseStream.EndRead(ar);
if (read > 0)
{
//創(chuàng )建內存流
MemoryStream ms = new MemoryStream(rs.Data, 0, read);
StreamReader reader = new StreamReader(ms, Encoding.GetEncoding("gb2312"));
string str = reader.ReadToEnd();
//添加到末尾
rs.Html.Append(str);
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
if (url.Contains(".jpg") || url.Contains(".png"))
{
//images = rs.Images;
SaveContents(rs.memoryStream.GetBuffer(), url);
}
else
{
html = rs.Html.ToString();
//保存
SaveContents(html, url);
//獲取頁(yè)面的鏈接
}
}
catch (Exception ex)
{
_reqsBusy[rs.Index] = false;
DispatchWork();
}
List links = GetLinks(html,url);
//得到過(guò)濾后的鏈接,并保存到未下載集合
AddUrls(links, depth + 1);
_reqsBusy[index] = false;
DispatchWork();
}
#endregion
這就是數據的處理,這是這里的重點(diǎn)。其實(shí)不難判斷是不是圖片。如果是圖片,把圖片存起來(lái),因為在目前的網(wǎng)絡(luò )爬蟲(chóng)還不夠先進(jìn)的情況下,爬取圖片比較實(shí)用有趣。(不要急著(zhù)找出哪個(gè)網(wǎng)站有很多女孩的照片),如果不是圖片,我們認為是正常的html頁(yè)面,然后閱讀html代碼,如果有鏈接http或 href,它將被添加到下載鏈接。當然,對于我們閱讀的鏈接,我們已經(jīng)限制了一些js或者一些css(不要閱讀這樣的東西)。
private void SaveContents(byte[] images, string url)
{
if (images.Count() < 1024*30)
return;
if (url.Contains(".jpg"))
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".jpg", images);
Console.WriteLine("圖片保存成功" + url);
}
else
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".png", images);
Console.WriteLine("圖片保存成功" + url);
}
}
#region 提取頁(yè)面鏈接 + List GetLinks(string html)
///
/// 提取頁(yè)面鏈接
///
///
///
private List GetLinks(string html,string url)
{
//匹配http鏈接
const string pattern2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
Regex r2 = new Regex(pattern2, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m2 = r2.Matches(html);
List links = new List();
for (int i = 0; i < m2.Count; i++)
{
//這個(gè)原因是w3school的網(wǎng)址,但里面的東西明顯不是我們想要的
if (m2[i].ToString().Contains("www.w3.org"))
continue;
links.Add(m2[i].ToString());
}
//匹配href里面的鏈接,并加到主網(wǎng)址上(學(xué)網(wǎng)站的你懂的)
const string pattern = @"href=([""'])?(?[^'""]+)\1[^>]*";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m = r.Matches(html);
// List links = new List();
for (int i = 0; i < m.Count; i++)
{
string href1 = m[i].ToString().Replace("href=", "");
href1 = href1.Replace("\"", "");
//找到符合的,添加到主網(wǎng)址(一開(kāi)始輸入的網(wǎng)址)里面去
string href = RootUrl + href1;
if (m[i].ToString().Contains("www.w3.org"))
continue;
links.Add(href);
}
return links;
}
#endregion
提取頁(yè)面鏈接的方法,當閱讀發(fā)現這是html代碼時(shí),繼續解釋里面的代碼,找到里面的url鏈接,這正是擁有網(wǎng)絡(luò )爬蟲(chóng)功能的方法(不然會(huì )很無(wú)聊只提取這個(gè)頁(yè)面),這里當然應該提取http鏈接,href中的字是因為。. . . (學(xué)網(wǎng)站你懂的,很難解釋?zhuān)缀跛械膱D片都放在里面,文章,所以上面有href之類(lèi)的代碼要處理。
#region 添加url到 UnDownLoad 集合 + AddUrls(List urls, int depth)
///
/// 添加url到 UnDownLoad 集合
///
///
///
private void AddUrls(List urls, int depth)
{
lock (_locker)
{
if (depth >= MAXDEPTH)
{
//深度過(guò)大
return;
}
foreach (string url in urls)
{
string cleanUrl = url.Trim();
int end = cleanUrl.IndexOf(' ');
if (end > 0)
{
cleanUrl = cleanUrl.Substring(0, end);
}
if (UrlAvailable(cleanUrl))
{
UnDownLoad.Add(cleanUrl, depth);
}
}
}
}
#endregion
#region 開(kāi)始捕獲 + DispatchWork()
///
/// 開(kāi)始捕獲
///
private void DispatchWork()
{
for (int i = 0; i < _reqCount; i++)
{
if (!_reqsBusy[i])
{
Request(i);
Thread.Sleep(1000);
}
}
}
#endregion
此功能是為了使這些錯誤起作用。_reqCount 的值在開(kāi)頭設置。事實(shí)上,視覺(jué)上的理解就是你發(fā)布的 bug 的數量。在這個(gè)程序中,我默認放了20個(gè),可以隨時(shí)修改。對于一些需要cookies的網(wǎng)站,就是通過(guò)訪(fǎng)問(wèn)開(kāi)頭輸入的URL,當然也可以使用HttpWebRequest輔助類(lèi),cookies = request.CookieContainer; //保存cookie,以后訪(fǎng)問(wèn)后續URL時(shí)添加就行 request.CookieContainer = cookies; //餅干嘗試。對于 網(wǎng)站 只能通過(guò)應用 cookie 訪(fǎng)問(wèn),不需要根網(wǎng)頁(yè),就像不需要百度圖片的 URL,但如果訪(fǎng)問(wèn)里面的圖片很突然,cookie會(huì )附上,所以這個(gè)問(wèn)題也解決了。xmfdsh 發(fā)現這個(gè)程序中還有一些網(wǎng)站不能抓圖。當捕捉到一定數量的照片時(shí)它會(huì )停止。具體原因不明,以后慢慢完善。
附上源碼:%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB.rar 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(怎么老是靜不下心來(lái)心來(lái)搞定一方面的技術(shù),再學(xué)點(diǎn)其他的東西)
我對xmfdsh真的很感興趣,為什么不能靜下心來(lái)搞定一個(gè)方面的技術(shù),然后再學(xué)習其他的東西,一步一步來(lái),好吧,我又要去學(xué)習網(wǎng)絡(luò )爬蟲(chóng)了,這是一個(gè)簡(jiǎn)單的版本,參考網(wǎng)上很多資料,用C#寫(xiě)的,專(zhuān)門(mén)抓圖,可以抓一些需要cookies的網(wǎng)站,所以功能還是挺全的,xmfdsh才研究了三天,所以有仍有很大的改進(jìn)空間。我會(huì )慢慢改進(jìn)的。我將在本文末尾附上整個(gè)項目。獻給喜歡學(xué)習C#的朋友。讓我慢慢說(shuō):
#region 訪(fǎng)問(wèn)數據 + Request(int index)
///
/// 訪(fǎng)問(wèn)數據
///
private void Request(int index)
{
try
{
int depth;
string url = "";
//lock鎖住Dictionary,因為Dictionary多線(xiàn)程會(huì )出錯
lock (_locker)
{
//查看是否還存在未下載的鏈接
if (UnDownLoad.Count 0)
{
MemoryStream ms = new System.IO.MemoryStream(rs.Data, 0, read);
BinaryReader reader = new BinaryReader(ms);
byte[] buffer = new byte[32 * 1024];
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
rs.memoryStream.Write(buffer, 0, read);
}
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
else
{
read = responseStream.EndRead(ar);
if (read > 0)
{
//創(chuàng )建內存流
MemoryStream ms = new MemoryStream(rs.Data, 0, read);
StreamReader reader = new StreamReader(ms, Encoding.GetEncoding("gb2312"));
string str = reader.ReadToEnd();
//添加到末尾
rs.Html.Append(str);
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
if (url.Contains(".jpg") || url.Contains(".png"))
{
//images = rs.Images;
SaveContents(rs.memoryStream.GetBuffer(), url);
}
else
{
html = rs.Html.ToString();
//保存
SaveContents(html, url);
//獲取頁(yè)面的鏈接
}
}
catch (Exception ex)
{
_reqsBusy[rs.Index] = false;
DispatchWork();
}
List links = GetLinks(html,url);
//得到過(guò)濾后的鏈接,并保存到未下載集合
AddUrls(links, depth + 1);
_reqsBusy[index] = false;
DispatchWork();
}
#endregion
這就是數據的處理,這是這里的重點(diǎn)。其實(shí)不難判斷是不是圖片。如果是圖片,把圖片存起來(lái),因為在目前的網(wǎng)絡(luò )爬蟲(chóng)還不夠先進(jìn)的情況下,爬取圖片比較實(shí)用有趣。(不要急著(zhù)找出哪個(gè)網(wǎng)站有很多女孩的照片),如果不是圖片,我們認為是正常的html頁(yè)面,然后閱讀html代碼,如果有鏈接http或 href,它將被添加到下載鏈接。當然,對于我們閱讀的鏈接,我們已經(jīng)限制了一些js或者一些css(不要閱讀這樣的東西)。
private void SaveContents(byte[] images, string url)
{
if (images.Count() < 1024*30)
return;
if (url.Contains(".jpg"))
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".jpg", images);
Console.WriteLine("圖片保存成功" + url);
}
else
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".png", images);
Console.WriteLine("圖片保存成功" + url);
}
}
#region 提取頁(yè)面鏈接 + List GetLinks(string html)
///
/// 提取頁(yè)面鏈接
///
///
///
private List GetLinks(string html,string url)
{
//匹配http鏈接
const string pattern2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
Regex r2 = new Regex(pattern2, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m2 = r2.Matches(html);
List links = new List();
for (int i = 0; i < m2.Count; i++)
{
//這個(gè)原因是w3school的網(wǎng)址,但里面的東西明顯不是我們想要的
if (m2[i].ToString().Contains("www.w3.org"))
continue;
links.Add(m2[i].ToString());
}
//匹配href里面的鏈接,并加到主網(wǎng)址上(學(xué)網(wǎng)站的你懂的)
const string pattern = @"href=([""'])?(?[^'""]+)\1[^>]*";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m = r.Matches(html);
// List links = new List();
for (int i = 0; i < m.Count; i++)
{
string href1 = m[i].ToString().Replace("href=", "");
href1 = href1.Replace("\"", "");
//找到符合的,添加到主網(wǎng)址(一開(kāi)始輸入的網(wǎng)址)里面去
string href = RootUrl + href1;
if (m[i].ToString().Contains("www.w3.org"))
continue;
links.Add(href);
}
return links;
}
#endregion
提取頁(yè)面鏈接的方法,當閱讀發(fā)現這是html代碼時(shí),繼續解釋里面的代碼,找到里面的url鏈接,這正是擁有網(wǎng)絡(luò )爬蟲(chóng)功能的方法(不然會(huì )很無(wú)聊只提取這個(gè)頁(yè)面),這里當然應該提取http鏈接,href中的字是因為。. . . (學(xué)網(wǎng)站你懂的,很難解釋?zhuān)缀跛械膱D片都放在里面,文章,所以上面有href之類(lèi)的代碼要處理。
#region 添加url到 UnDownLoad 集合 + AddUrls(List urls, int depth)
///
/// 添加url到 UnDownLoad 集合
///
///
///
private void AddUrls(List urls, int depth)
{
lock (_locker)
{
if (depth >= MAXDEPTH)
{
//深度過(guò)大
return;
}
foreach (string url in urls)
{
string cleanUrl = url.Trim();
int end = cleanUrl.IndexOf(' ');
if (end > 0)
{
cleanUrl = cleanUrl.Substring(0, end);
}
if (UrlAvailable(cleanUrl))
{
UnDownLoad.Add(cleanUrl, depth);
}
}
}
}
#endregion
#region 開(kāi)始捕獲 + DispatchWork()
///
/// 開(kāi)始捕獲
///
private void DispatchWork()
{
for (int i = 0; i < _reqCount; i++)
{
if (!_reqsBusy[i])
{
Request(i);
Thread.Sleep(1000);
}
}
}
#endregion
此功能是為了使這些錯誤起作用。_reqCount 的值在開(kāi)頭設置。事實(shí)上,視覺(jué)上的理解就是你發(fā)布的 bug 的數量。在這個(gè)程序中,我默認放了20個(gè),可以隨時(shí)修改。對于一些需要cookies的網(wǎng)站,就是通過(guò)訪(fǎng)問(wèn)開(kāi)頭輸入的URL,當然也可以使用HttpWebRequest輔助類(lèi),cookies = request.CookieContainer; //保存cookie,以后訪(fǎng)問(wèn)后續URL時(shí)添加就行 request.CookieContainer = cookies; //餅干嘗試。對于 網(wǎng)站 只能通過(guò)應用 cookie 訪(fǎng)問(wèn),不需要根網(wǎng)頁(yè),就像不需要百度圖片的 URL,但如果訪(fǎng)問(wèn)里面的圖片很突然,cookie會(huì )附上,所以這個(gè)問(wèn)題也解決了。xmfdsh 發(fā)現這個(gè)程序中還有一些網(wǎng)站不能抓圖。當捕捉到一定數量的照片時(shí)它會(huì )停止。具體原因不明,以后慢慢完善。
附上源碼:%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB.rar
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-03-12 03:11
一、介紹
我學(xué)習 Python 已經(jīng)有一段時(shí)間了。聽(tīng)說(shuō)Python爬蟲(chóng)很厲害。我現在才學(xué)到這個(gè)。跟著(zhù)小龜的Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,可以實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載。
二、代碼
__author__ = "JentZhang"
import urllib.request
import os
import random
import re
def url_open(url):
'''
打開(kāi)網(wǎng)頁(yè)
:param url:
:return:
'''
req = urllib.request.Request(url)
req.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36')
# 應用代理
'''
proxyies = ["111.155.116.237:8123","101.236.23.202:8866","122.114.31.177:808"]
proxy = random.choice(proxyies)
proxy_support = urllib.request.ProxyHandler({"http": proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
'''
response = urllib.request.urlopen(url)
html = response.read()
return html
def save_img(folder, img_addrs):
'''
保存圖片
:param folder: 要保存的文件夾
:param img_addrs: 圖片地址(列表)
:return:
'''
# 創(chuàng )建文件夾用來(lái)存放圖片
if not os.path.exists(folder):
os.mkdir(folder)
os.chdir(folder)
for each in img_addrs:
filename = each.split('/')[-1]
try:
with open(filename, 'wb') as f:
img = url_open("http:" + each)
f.write(img)
except urllib.error.HTTPError as e:
# print(e.reason)
pass
print('完畢!')
def find_imgs(url):
'''
獲取全部的圖片鏈接
:param url: 連接地址
:return: 圖片地址的列表
'''
html = url_open(url).decode("utf-8")
img_addrs = re.findall(r'src="(.+?\.gif)', html)
return img_addrs
def get_page(url):
'''
獲取當前一共有多少頁(yè)的圖片
:param url: 網(wǎng)頁(yè)地址
:return:
'''
html = url_open(url).decode('utf-8')
a = html.find("current-comment-page") + 23
b = html.find("]", a)
return html[a:b]
def download_mm(url="http://jandan.net/ooxx/", folder="OOXX", pages=1):
'''
主程序(下載圖片)
:param folder:默認存放的文件夾
:param pages: 下載的頁(yè)數
:return:
'''
page_num = int(get_page(url))
for i in range(pages):
page_num -= i
page_url = url + "page-" + str(page_num) + "#comments"
img_addrs = find_imgs(page_url)
save_img(folder, img_addrs)
if __name__ == "__main__":
download_mm()
三、總結
因為代碼中訪(fǎng)問(wèn)的網(wǎng)址使用了反爬蟲(chóng)算法。所以無(wú)法爬取想要的圖片,所以,只做爬蟲(chóng)筆記。僅供學(xué)習參考【捂臉】。 . . .
終于:我把jpg格式改成gif了,還是能爬到一個(gè)很差的gif圖:
第一張圖片是反爬機制的圖片占位符,完全沒(méi)有內容 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載)
一、介紹
我學(xué)習 Python 已經(jīng)有一段時(shí)間了。聽(tīng)說(shuō)Python爬蟲(chóng)很厲害。我現在才學(xué)到這個(gè)。跟著(zhù)小龜的Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,可以實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載。
二、代碼
__author__ = "JentZhang"
import urllib.request
import os
import random
import re
def url_open(url):
'''
打開(kāi)網(wǎng)頁(yè)
:param url:
:return:
'''
req = urllib.request.Request(url)
req.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36')
# 應用代理
'''
proxyies = ["111.155.116.237:8123","101.236.23.202:8866","122.114.31.177:808"]
proxy = random.choice(proxyies)
proxy_support = urllib.request.ProxyHandler({"http": proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
'''
response = urllib.request.urlopen(url)
html = response.read()
return html
def save_img(folder, img_addrs):
'''
保存圖片
:param folder: 要保存的文件夾
:param img_addrs: 圖片地址(列表)
:return:
'''
# 創(chuàng )建文件夾用來(lái)存放圖片
if not os.path.exists(folder):
os.mkdir(folder)
os.chdir(folder)
for each in img_addrs:
filename = each.split('/')[-1]
try:
with open(filename, 'wb') as f:
img = url_open("http:" + each)
f.write(img)
except urllib.error.HTTPError as e:
# print(e.reason)
pass
print('完畢!')
def find_imgs(url):
'''
獲取全部的圖片鏈接
:param url: 連接地址
:return: 圖片地址的列表
'''
html = url_open(url).decode("utf-8")
img_addrs = re.findall(r'src="(.+?\.gif)', html)
return img_addrs
def get_page(url):
'''
獲取當前一共有多少頁(yè)的圖片
:param url: 網(wǎng)頁(yè)地址
:return:
'''
html = url_open(url).decode('utf-8')
a = html.find("current-comment-page") + 23
b = html.find("]", a)
return html[a:b]
def download_mm(url="http://jandan.net/ooxx/", folder="OOXX", pages=1):
'''
主程序(下載圖片)
:param folder:默認存放的文件夾
:param pages: 下載的頁(yè)數
:return:
'''
page_num = int(get_page(url))
for i in range(pages):
page_num -= i
page_url = url + "page-" + str(page_num) + "#comments"
img_addrs = find_imgs(page_url)
save_img(folder, img_addrs)
if __name__ == "__main__":
download_mm()
三、總結
因為代碼中訪(fǎng)問(wèn)的網(wǎng)址使用了反爬蟲(chóng)算法。所以無(wú)法爬取想要的圖片,所以,只做爬蟲(chóng)筆記。僅供學(xué)習參考【捂臉】。 . . .
終于:我把jpg格式改成gif了,還是能爬到一個(gè)很差的gif圖:

第一張圖片是反爬機制的圖片占位符,完全沒(méi)有內容
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(越過(guò)亞馬遜的反爬蟲(chóng)機制,成功越過(guò)反爬機制(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-03-10 04:21
事情是這樣的
亞馬遜是全球最大的購物平臺
很多產(chǎn)品信息、用戶(hù)評論等都是最豐富的。
今天就帶大家一起來(lái)穿越亞馬遜的反爬蟲(chóng)機制吧
抓取您想要的有用信息,例如產(chǎn)品、評論等
反爬蟲(chóng)機制
但是,當我們想使用爬蟲(chóng)爬取相關(guān)數據信息時(shí)
亞馬遜、TBO、京東等大型購物中心
為了保護他們的數據信息,他們都有一套完整的反爬蟲(chóng)機制。
先試試亞馬遜的反爬機制
我們使用幾個(gè)不同的python爬蟲(chóng)模塊來(lái)一步步測試
最終,防爬機制順利通過(guò)。
一、urllib 模塊
代碼顯示如下:
# -*- coding:utf-8 -*-
import urllib.request
req = urllib.request.urlopen('https://www.amazon.com')
print(req.code)
復制代碼
返回結果:狀態(tài)碼:503。
分析:亞馬遜將你的請求識別為爬蟲(chóng),拒絕提供服務(wù)。
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)
代碼如下↓ ↓ ↓
import requests
url='https://www.amazon.com/KAVU-Rope-Bag-Denim-Size/product-reviews/xxxxxxx'
web_header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Cookie': '你的cookie值',
'TE': 'Trailers'}
r = requests.get(url,headers=web_header)
print(r.status_code)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,屬于正常。它聞起來(lái)像爬蟲(chóng)。
3、查看返回頁(yè)面
通過(guò)requests+cookie的方法,我們得到的狀態(tài)碼是200
至少它目前由亞馬遜的服務(wù)器提供服務(wù)。
我們將爬取的頁(yè)面寫(xiě)入文本并在瀏覽器中打開(kāi)。
我在騎馬……返回狀態(tài)正常,但是返回了反爬蟲(chóng)驗證碼頁(yè)面。
仍然被亞馬遜屏蔽。
三、硒自動(dòng)化模塊
相關(guān)硒模塊的安裝
pip install selenium
復制代碼
在代碼中引入 selenium 并設置相關(guān)參數
import os
from requests.api import options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#selenium配置參數
options = Options()
#配置無(wú)頭參數,即不打開(kāi)瀏覽器
options.add_argument('--headless')
#配置Chrome瀏覽器的selenium驅動(dòng)
chromedriver="C:/Users/pacer/AppData/Local/Google/Chrome/Application/chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
#將參數設置+瀏覽器驅動(dòng)組合
browser = webdriver.Chrome(chromedriver,chrome_options=options)
復制代碼
測試訪(fǎng)問(wèn)
url = "https://www.amazon.com"
print(url)
#通過(guò)selenium來(lái)訪(fǎng)問(wèn)亞馬遜
browser.get(url)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,訪(fǎng)問(wèn)狀態(tài)正常。我們來(lái)看看爬取的網(wǎng)頁(yè)上的信息。
將網(wǎng)頁(yè)源代碼保存到本地
#將爬取到的網(wǎng)頁(yè)信息,寫(xiě)入到本地文件
fw=open('E:/amzon.html','w',encoding='utf-8')
fw.write(str(browser.page_source))
browser.close()
fw.close()
復制代碼
打開(kāi)我們爬取的本地文件查看,
我們已經(jīng)成功繞過(guò)反爬機制,進(jìn)入亞馬遜首頁(yè)
結尾
通過(guò)selenium模塊,我們可以成功穿越
亞馬遜的反爬蟲(chóng)機制。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(越過(guò)亞馬遜的反爬蟲(chóng)機制,成功越過(guò)反爬機制(組圖))
事情是這樣的
亞馬遜是全球最大的購物平臺
很多產(chǎn)品信息、用戶(hù)評論等都是最豐富的。
今天就帶大家一起來(lái)穿越亞馬遜的反爬蟲(chóng)機制吧
抓取您想要的有用信息,例如產(chǎn)品、評論等

反爬蟲(chóng)機制
但是,當我們想使用爬蟲(chóng)爬取相關(guān)數據信息時(shí)
亞馬遜、TBO、京東等大型購物中心
為了保護他們的數據信息,他們都有一套完整的反爬蟲(chóng)機制。
先試試亞馬遜的反爬機制
我們使用幾個(gè)不同的python爬蟲(chóng)模塊來(lái)一步步測試
最終,防爬機制順利通過(guò)。
一、urllib 模塊
代碼顯示如下:
# -*- coding:utf-8 -*-
import urllib.request
req = urllib.request.urlopen('https://www.amazon.com')
print(req.code)
復制代碼
返回結果:狀態(tài)碼:503。
分析:亞馬遜將你的請求識別為爬蟲(chóng),拒絕提供服務(wù)。

以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200

分析:正常訪(fǎng)問(wèn)
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)

代碼如下↓ ↓ ↓
import requests
url='https://www.amazon.com/KAVU-Rope-Bag-Denim-Size/product-reviews/xxxxxxx'
web_header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Cookie': '你的cookie值',
'TE': 'Trailers'}
r = requests.get(url,headers=web_header)
print(r.status_code)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,屬于正常。它聞起來(lái)像爬蟲(chóng)。
3、查看返回頁(yè)面
通過(guò)requests+cookie的方法,我們得到的狀態(tài)碼是200
至少它目前由亞馬遜的服務(wù)器提供服務(wù)。
我們將爬取的頁(yè)面寫(xiě)入文本并在瀏覽器中打開(kāi)。

我在騎馬……返回狀態(tài)正常,但是返回了反爬蟲(chóng)驗證碼頁(yè)面。
仍然被亞馬遜屏蔽。
三、硒自動(dòng)化模塊
相關(guān)硒模塊的安裝
pip install selenium
復制代碼
在代碼中引入 selenium 并設置相關(guān)參數
import os
from requests.api import options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#selenium配置參數
options = Options()
#配置無(wú)頭參數,即不打開(kāi)瀏覽器
options.add_argument('--headless')
#配置Chrome瀏覽器的selenium驅動(dòng)
chromedriver="C:/Users/pacer/AppData/Local/Google/Chrome/Application/chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
#將參數設置+瀏覽器驅動(dòng)組合
browser = webdriver.Chrome(chromedriver,chrome_options=options)
復制代碼
測試訪(fǎng)問(wèn)
url = "https://www.amazon.com"
print(url)
#通過(guò)selenium來(lái)訪(fǎng)問(wèn)亞馬遜
browser.get(url)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,訪(fǎng)問(wèn)狀態(tài)正常。我們來(lái)看看爬取的網(wǎng)頁(yè)上的信息。
將網(wǎng)頁(yè)源代碼保存到本地
#將爬取到的網(wǎng)頁(yè)信息,寫(xiě)入到本地文件
fw=open('E:/amzon.html','w',encoding='utf-8')
fw.write(str(browser.page_source))
browser.close()
fw.close()
復制代碼
打開(kāi)我們爬取的本地文件查看,
我們已經(jīng)成功繞過(guò)反爬機制,進(jìn)入亞馬遜首頁(yè)

結尾
通過(guò)selenium模塊,我們可以成功穿越
亞馬遜的反爬蟲(chóng)機制。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)技術(shù)(Webcrawler)的工作流程及注意事項)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-03-09 15:11
網(wǎng)絡(luò )爬蟲(chóng)技術(shù)
網(wǎng)絡(luò )爬蟲(chóng)是根據一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。它們被廣泛應用于互聯(lián)網(wǎng)搜索引擎或其他類(lèi)似的網(wǎng)站,并且可以自動(dòng)采集所有它可以訪(fǎng)問(wèn)的頁(yè)面的內容來(lái)獲取或更新這些網(wǎng)站的內容和檢索方式. 從功能上來(lái)說(shuō),爬蟲(chóng)一般分為數據采集、處理、存儲三部分。
傳統爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。
焦點(diǎn)爬蟲(chóng)的工作流程比較復雜。它需要按照一定的網(wǎng)頁(yè)分析算法過(guò)濾掉與主題無(wú)關(guān)的鏈接,保留有用的鏈接,并放入等待抓取的URL隊列中。然后,它會(huì )根據一定的搜索策略從隊列中選擇下一個(gè)要爬取的網(wǎng)頁(yè)URL,并重復上述過(guò)程,直到達到系統的一定條件并停止。此外,爬蟲(chóng)爬取的所有網(wǎng)頁(yè)都會(huì )被系統存儲,經(jīng)過(guò)一定的分析、過(guò)濾、索引,以供后續查詢(xún)和檢索;對于重點(diǎn)爬蟲(chóng)來(lái)說(shuō),這個(gè)過(guò)程中得到的分析結果也可能對后續的爬取過(guò)程給出反饋和指導。
反爬蟲(chóng)技術(shù)
由于搜索引擎的普及,網(wǎng)絡(luò )爬蟲(chóng)已經(jīng)成為一種非常流行的網(wǎng)絡(luò )技術(shù)。除了專(zhuān)注于搜索的谷歌、雅虎、微軟和百度之外,幾乎每個(gè)大型門(mén)戶(hù)網(wǎng)站網(wǎng)站都有自己的搜索引擎,大大小小的??梢越械拿钟袔资N,不知道的種類(lèi)有上萬(wàn)種。對于一個(gè)內容驅動(dòng)的網(wǎng)站,難免會(huì )被網(wǎng)絡(luò )爬蟲(chóng)光顧。
一些智能搜索引擎爬蟲(chóng)的爬取頻率比較合理,資源消耗也比較小,但是很多不良網(wǎng)絡(luò )爬蟲(chóng)對網(wǎng)頁(yè)的爬取能力很差,經(jīng)常循環(huán)重復上百個(gè)請求。拿,這種爬蟲(chóng)對中小型網(wǎng)站來(lái)說(shuō)往往是毀滅性的打擊,尤其是一些缺乏爬蟲(chóng)編寫(xiě)經(jīng)驗的程序員編寫(xiě)的爬蟲(chóng),破壞性極大,導致網(wǎng)站訪(fǎng)問(wèn)壓力會(huì )很大非常大,這將導致 網(wǎng)站 訪(fǎng)問(wèn)緩慢甚至無(wú)法訪(fǎng)問(wèn)。
一般網(wǎng)站反爬蟲(chóng)從三個(gè)方面:用戶(hù)請求的頭文件、用戶(hù)行為、網(wǎng)站目錄和數據加載方式。前兩種比較容易遇到,從這些角度來(lái)看,大部分網(wǎng)站都是反爬蟲(chóng)。會(huì )使用第三種使用ajax的網(wǎng)站,增加了爬取的難度。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)技術(shù)(Webcrawler)的工作流程及注意事項)
網(wǎng)絡(luò )爬蟲(chóng)技術(shù)
網(wǎng)絡(luò )爬蟲(chóng)是根據一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。它們被廣泛應用于互聯(lián)網(wǎng)搜索引擎或其他類(lèi)似的網(wǎng)站,并且可以自動(dòng)采集所有它可以訪(fǎng)問(wèn)的頁(yè)面的內容來(lái)獲取或更新這些網(wǎng)站的內容和檢索方式. 從功能上來(lái)說(shuō),爬蟲(chóng)一般分為數據采集、處理、存儲三部分。
傳統爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。
焦點(diǎn)爬蟲(chóng)的工作流程比較復雜。它需要按照一定的網(wǎng)頁(yè)分析算法過(guò)濾掉與主題無(wú)關(guān)的鏈接,保留有用的鏈接,并放入等待抓取的URL隊列中。然后,它會(huì )根據一定的搜索策略從隊列中選擇下一個(gè)要爬取的網(wǎng)頁(yè)URL,并重復上述過(guò)程,直到達到系統的一定條件并停止。此外,爬蟲(chóng)爬取的所有網(wǎng)頁(yè)都會(huì )被系統存儲,經(jīng)過(guò)一定的分析、過(guò)濾、索引,以供后續查詢(xún)和檢索;對于重點(diǎn)爬蟲(chóng)來(lái)說(shuō),這個(gè)過(guò)程中得到的分析結果也可能對后續的爬取過(guò)程給出反饋和指導。

反爬蟲(chóng)技術(shù)
由于搜索引擎的普及,網(wǎng)絡(luò )爬蟲(chóng)已經(jīng)成為一種非常流行的網(wǎng)絡(luò )技術(shù)。除了專(zhuān)注于搜索的谷歌、雅虎、微軟和百度之外,幾乎每個(gè)大型門(mén)戶(hù)網(wǎng)站網(wǎng)站都有自己的搜索引擎,大大小小的??梢越械拿钟袔资N,不知道的種類(lèi)有上萬(wàn)種。對于一個(gè)內容驅動(dòng)的網(wǎng)站,難免會(huì )被網(wǎng)絡(luò )爬蟲(chóng)光顧。
一些智能搜索引擎爬蟲(chóng)的爬取頻率比較合理,資源消耗也比較小,但是很多不良網(wǎng)絡(luò )爬蟲(chóng)對網(wǎng)頁(yè)的爬取能力很差,經(jīng)常循環(huán)重復上百個(gè)請求。拿,這種爬蟲(chóng)對中小型網(wǎng)站來(lái)說(shuō)往往是毀滅性的打擊,尤其是一些缺乏爬蟲(chóng)編寫(xiě)經(jīng)驗的程序員編寫(xiě)的爬蟲(chóng),破壞性極大,導致網(wǎng)站訪(fǎng)問(wèn)壓力會(huì )很大非常大,這將導致 網(wǎng)站 訪(fǎng)問(wèn)緩慢甚至無(wú)法訪(fǎng)問(wèn)。
一般網(wǎng)站反爬蟲(chóng)從三個(gè)方面:用戶(hù)請求的頭文件、用戶(hù)行為、網(wǎng)站目錄和數據加載方式。前兩種比較容易遇到,從這些角度來(lái)看,大部分網(wǎng)站都是反爬蟲(chóng)。會(huì )使用第三種使用ajax的網(wǎng)站,增加了爬取的難度。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 66 次瀏覽 ? 2022-03-07 10:07
爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
測試爬取百度貼吧圖片
定義爬取百度斗圖首頁(yè)每篇文章URL的爬取規則對象
1 /**
2 * 斗圖吧貼子的url
3 */
4 SpiderFunction doutubaTieZiUrl = spider -> {
5 // 文本爬取對象
6 TextSpider textSpider = (TextSpider) spider;
7 // 文本爬取規則 定位元素
8 textSpider.setReg("div:t_concleafix>*>a>href>*");
9 return textSpider.getData().getResult().stream()
10 // 爬取后的數據處理 因為可能存在相同引用的連接所以使用Set容器去重
11 .filter(url -> (!"#".equals(url)) && (!url.contains("?")) && (url.contains("/p/")))
12 .map(url -> url.startsWith("http") ? url : "https://tieba.baidu.com" + url
13 ).collect(Collectors.toSet());
14 };
15
16
在搜索爬蟲(chóng)規則的過(guò)程中,發(fā)現百度貼吧帖子列表頁(yè)面的所有內容都被注釋掉了,所以需要修改文字規則攔截部分的代碼
過(guò)濾評論部分需要處理
編寫(xiě)一個(gè)爬取規則對象,爬取每篇文章的頁(yè)數
1 /**
2 * 百度貼吧貼子的每頁(yè)的url
3 */
4 SpiderFunction doutubaTieZiPageUrl = spider -> {
5 Set urls = new HashSet();
6 String page = spider.getUrl();
7 TextSpider textSpider = (TextSpider) spider;
8 // 定位總頁(yè)數位置
9 textSpider.setReg("li:l_reply_num>1>span>2");
10 List result = textSpider.getData().getResult();
11 // 循環(huán)生成某個(gè)貼子的所有頁(yè)面的url
12 if (Lists.isValuable(result)) {
13 String endNum = result.get(0);
14 if (endNum.matches("^[0-9]+$")) {
15 for (int i = 1; i {
5 TextSpider textSpider = (TextSpider) spider;
6 textSpider.setReg("div:p_content>*>img>src>*");
7 return textSpider.getData().getResult().stream()
8 .map(url -> url.startsWith("http") ? url : spider.getUrl() + url)
9 .filter(SpiderCommonUtils::isImgUrl)
10 .collect(Collectors.toSet());
11 };
12
13
獲取豆瓣的代碼
1 /**
2 * 抓取斗圖吧圖片
3 */
4 @Test
5 public void testP(){
6 //String doutu = "https://tieba.baidu.com/f%3Fkw ... 3B%3B
7 for (int i = 0; i {
56 if (jsonMap.containsKey(tag)) {
57 result.addAll(getDataList(jsonMap.get(tag).toString(),endTag));
58 }
59 });
60 }
61 }else{
62 JSON json = JSONUtil.parse(source);
63 if (json instanceof JSONObject) {
64 if (((JSONObject) json).containsKey(reg)) {
65 result.add(((JSONObject) json).get(reg).toString());
66 }
67 } else if (json instanceof JSONArray) {
68 ((JSONArray) json).toList(Map.class).stream().forEach(jsonMap -> {
69 if (jsonMap.containsKey(reg)) {
70 result.add(jsonMap.get(reg).toString());
71 }
72 });
73 }
74 }
75 return result;
76 }
77}
78
79
編寫(xiě)爬取規則對象
1 /**
2 * 百度搜圖的圖片url
3 */
4 SpiderFunction baiDuSouImgUrl = spider -> {
5 AjaxSpider ajaxSpider = (AjaxSpider) spider;
6 return ajaxSpider.getData().getDataList("data.hoverURL");
7 };
8
9
爬取代碼
<p>1 /**
2 * 抓取百度圖片搜索
3 */
4 @Test
5 public void testPt(){
6 String image = "https://image.baidu.com/search/acjson?";
7 //搜索的關(guān)鍵字
8 String queryWords = "米老鼠";
9 // 參數
10 Map parms = new HashMap();
11 parms.put("tn", "resultjson_com");
12 parms.put("ipn", "rj");
13 parms.put("ct", "201326592");
14 parms.put("is", "");
15 parms.put("fp", "result");
16 parms.put("queryWord", queryWords);
17 parms.put("cl", "2");
18 parms.put("lm", "-1");
19 parms.put("ie", "utf-8");
20 parms.put("oe", "utf-8");
21 parms.put("adpicid", "");
22 parms.put("st", "-1");
23 parms.put("z", "");
24 parms.put("ic", "0");
25 parms.put("hd", "");
26 parms.put("latest", "");
27 parms.put("copyright", "");
28 parms.put("word", queryWords);
29 parms.put("s", "");
30 parms.put("se", "");
31 parms.put("tab", "");
32 parms.put("width", "");
33 parms.put("height", "");
34 parms.put("face", "0");
35 parms.put("istype", "2");
36 parms.put("qc", "");
37 parms.put("nc", "1");
38 parms.put("fr", "");
39 parms.put("expermode", "");
40 parms.put("rn", "30");
41 parms.put("gsm", "");
42 parms.put(String.valueOf(System.currentTimeMillis()),"");
43 for (int i = 0; i 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
測試爬取百度貼吧圖片
定義爬取百度斗圖首頁(yè)每篇文章URL的爬取規則對象
1 /**
2 * 斗圖吧貼子的url
3 */
4 SpiderFunction doutubaTieZiUrl = spider -> {
5 // 文本爬取對象
6 TextSpider textSpider = (TextSpider) spider;
7 // 文本爬取規則 定位元素
8 textSpider.setReg("div:t_concleafix>*>a>href>*");
9 return textSpider.getData().getResult().stream()
10 // 爬取后的數據處理 因為可能存在相同引用的連接所以使用Set容器去重
11 .filter(url -> (!"#".equals(url)) && (!url.contains("?")) && (url.contains("/p/")))
12 .map(url -> url.startsWith("http") ? url : "https://tieba.baidu.com" + url
13 ).collect(Collectors.toSet());
14 };
15
16
在搜索爬蟲(chóng)規則的過(guò)程中,發(fā)現百度貼吧帖子列表頁(yè)面的所有內容都被注釋掉了,所以需要修改文字規則攔截部分的代碼

過(guò)濾評論部分需要處理
編寫(xiě)一個(gè)爬取規則對象,爬取每篇文章的頁(yè)數
1 /**
2 * 百度貼吧貼子的每頁(yè)的url
3 */
4 SpiderFunction doutubaTieZiPageUrl = spider -> {
5 Set urls = new HashSet();
6 String page = spider.getUrl();
7 TextSpider textSpider = (TextSpider) spider;
8 // 定位總頁(yè)數位置
9 textSpider.setReg("li:l_reply_num>1>span>2");
10 List result = textSpider.getData().getResult();
11 // 循環(huán)生成某個(gè)貼子的所有頁(yè)面的url
12 if (Lists.isValuable(result)) {
13 String endNum = result.get(0);
14 if (endNum.matches("^[0-9]+$")) {
15 for (int i = 1; i {
5 TextSpider textSpider = (TextSpider) spider;
6 textSpider.setReg("div:p_content>*>img>src>*");
7 return textSpider.getData().getResult().stream()
8 .map(url -> url.startsWith("http") ? url : spider.getUrl() + url)
9 .filter(SpiderCommonUtils::isImgUrl)
10 .collect(Collectors.toSet());
11 };
12
13
獲取豆瓣的代碼
1 /**
2 * 抓取斗圖吧圖片
3 */
4 @Test
5 public void testP(){
6 //String doutu = "https://tieba.baidu.com/f%3Fkw ... 3B%3B
7 for (int i = 0; i {
56 if (jsonMap.containsKey(tag)) {
57 result.addAll(getDataList(jsonMap.get(tag).toString(),endTag));
58 }
59 });
60 }
61 }else{
62 JSON json = JSONUtil.parse(source);
63 if (json instanceof JSONObject) {
64 if (((JSONObject) json).containsKey(reg)) {
65 result.add(((JSONObject) json).get(reg).toString());
66 }
67 } else if (json instanceof JSONArray) {
68 ((JSONArray) json).toList(Map.class).stream().forEach(jsonMap -> {
69 if (jsonMap.containsKey(reg)) {
70 result.add(jsonMap.get(reg).toString());
71 }
72 });
73 }
74 }
75 return result;
76 }
77}
78
79
編寫(xiě)爬取規則對象
1 /**
2 * 百度搜圖的圖片url
3 */
4 SpiderFunction baiDuSouImgUrl = spider -> {
5 AjaxSpider ajaxSpider = (AjaxSpider) spider;
6 return ajaxSpider.getData().getDataList("data.hoverURL");
7 };
8
9
爬取代碼
<p>1 /**
2 * 抓取百度圖片搜索
3 */
4 @Test
5 public void testPt(){
6 String image = "https://image.baidu.com/search/acjson?";
7 //搜索的關(guān)鍵字
8 String queryWords = "米老鼠";
9 // 參數
10 Map parms = new HashMap();
11 parms.put("tn", "resultjson_com");
12 parms.put("ipn", "rj");
13 parms.put("ct", "201326592");
14 parms.put("is", "");
15 parms.put("fp", "result");
16 parms.put("queryWord", queryWords);
17 parms.put("cl", "2");
18 parms.put("lm", "-1");
19 parms.put("ie", "utf-8");
20 parms.put("oe", "utf-8");
21 parms.put("adpicid", "");
22 parms.put("st", "-1");
23 parms.put("z", "");
24 parms.put("ic", "0");
25 parms.put("hd", "");
26 parms.put("latest", "");
27 parms.put("copyright", "");
28 parms.put("word", queryWords);
29 parms.put("s", "");
30 parms.put("se", "");
31 parms.put("tab", "");
32 parms.put("width", "");
33 parms.put("height", "");
34 parms.put("face", "0");
35 parms.put("istype", "2");
36 parms.put("qc", "");
37 parms.put("nc", "1");
38 parms.put("fr", "");
39 parms.put("expermode", "");
40 parms.put("rn", "30");
41 parms.put("gsm", "");
42 parms.put(String.valueOf(System.currentTimeMillis()),"");
43 for (int i = 0; i
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)抓取csdn博客+C和Ctrl+V)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-03-06 06:12
Python爬蟲(chóng)csdn博客
昨晚為了把某csdn大佬的博文全部下載保存,寫(xiě)了一個(gè)爬蟲(chóng)自動(dòng)抓取文章保存為txt文本,當然也可以保存為html網(wǎng)頁(yè)。這樣Ctrl+C和Ctrl+V都可以用,很方便,抓取其他網(wǎng)站也差不多。
為了解析爬取的網(wǎng)頁(yè),使用了第三方模塊BeautifulSoup。這個(gè)模塊對于解析 html 文件非常有用。當然也可以使用正則表達式自己解析,但是比較麻煩。
由于csdn網(wǎng)站的robots.txt文件顯示禁止任何爬蟲(chóng),所以爬蟲(chóng)必須偽裝成瀏覽器,不能頻繁爬取。如果他們睡一會(huì )兒,他們就會(huì )被封鎖。 ,但可以使用代理ip。
<p>#-*-?encoding:?utf-8?-*-
'''
Created?on?2014-09-18?21:10:39
@author:?Mangoer
@email:?2395528746@qq.com
'''
import?urllib2
import?re
from?bs4?import?BeautifulSoup
import?random
import?time
class?CSDN_Blog_Spider:
?????def?__init__(self,url):
??????????print?'\n'
??????????print('已啟動(dòng)網(wǎng)絡(luò )爬蟲(chóng)。。。')
??????????print??'網(wǎng)頁(yè)地址:?'?+?url
??????????user_agents?=?[
????????????????????'Mozilla/5.0?(Windows;?U;?Windows?NT?5.1;?it;?rv:1.8.1.11)?Gecko/20071127?Firefox/2.0.0.11',
????????????????????'Opera/9.25?(Windows?NT?5.1;?U;?en)',
????????????????????'Mozilla/4.0?(compatible;?MSIE?6.0;?Windows?NT?5.1;?SV1;?.NET?CLR?1.1.4322;?.NET?CLR?2.0.50727)',
????????????????????'Mozilla/5.0?(compatible;?Konqueror/3.5;?Linux)?KHTML/3.5.5?(like?Gecko)?(Kubuntu)',
????????????????????'Mozilla/5.0?(X11;?U;?Linux?i686;?en-US;?rv:1.8.0.12)?Gecko/20070731?Ubuntu/dapper-security?Firefox/1.5.0.12',
????????????????????'Lynx/2.8.5rel.1?libwww-FM/2.14?SSL-MM/1.4.1?GNUTLS/1.2.9',
????????????????????"Mozilla/5.0?(X11;?Linux?i686)?AppleWebKit/535.7?(KHTML,?like?Gecko)?Ubuntu/11.04?Chromium/16.0.912.77?Chrome/16.0.912.77?Safari/535.7",
????????????????????"Mozilla/5.0?(X11;?Ubuntu;?Linux?i686;?rv:10.0)?Gecko/20100101?Firefox/10.0?",
???????????????????]
??????????#?use?proxy?ip?
??????????#?ips_list?=?['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118',
??????????#???????????'1.50.235.82:80','203.80.144.4:80']
??????????#?ip?=?random.choice(ips_list)
??????????#?print?'使用的代理ip地址:?'?+?ip
??????????#?proxy_support?=?urllib2.ProxyHandler({'http':'http://'+ip})
??????????#?opener?=?urllib2.build_opener(proxy_support)
??????????#?urllib2.install_opener(opener)
??????????agent?=?random.choice(user_agents)
??????????req?=?urllib2.Request(url)
??????????req.add_header('User-Agent',agent)
??????????req.add_header('Host','blog.csdn.net')
??????????req.add_header('Accept','*/*')
??????????req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list')
??????????req.add_header('GET',url)
??????????html?=?urllib2.urlopen(req)
??????????page?=?html.read().decode('gbk','ignore').encode('utf-8')
??????????self.page?=?page
??????????self.title?=?self.getTitle()
??????????self.content?=?self.getContent()
??????????self.saveFile()
??????????
?????def?printInfo(self):
??????????print('文章標題是:???'+self.title?+?'\n')?????????
??????????print('內容已經(jīng)存儲到out.txt文件中!')
?????def?getTitle(self):
??????????rex?=?re.compile('(.*?)',re.DOTALL)??????????
??????????match?=?rex.search(self.page)
??????????if?match:
????????????????return?match.group(1)
??????????return?'NO?TITLE'
?????def?getContent(self):
??????????bs?=?BeautifulSoup(self.page)
??????????html_content_list?=?bs.findAll('div',{'id':'article_content','class':'article_content'})
??????????html_content?=?str(html_content_list[0])
??????????rex_p?=?re.compile(r'(?:.*?)>(.*?) 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)抓取csdn博客+C和Ctrl+V)
Python爬蟲(chóng)csdn博客
昨晚為了把某csdn大佬的博文全部下載保存,寫(xiě)了一個(gè)爬蟲(chóng)自動(dòng)抓取文章保存為txt文本,當然也可以保存為html網(wǎng)頁(yè)。這樣Ctrl+C和Ctrl+V都可以用,很方便,抓取其他網(wǎng)站也差不多。
為了解析爬取的網(wǎng)頁(yè),使用了第三方模塊BeautifulSoup。這個(gè)模塊對于解析 html 文件非常有用。當然也可以使用正則表達式自己解析,但是比較麻煩。
由于csdn網(wǎng)站的robots.txt文件顯示禁止任何爬蟲(chóng),所以爬蟲(chóng)必須偽裝成瀏覽器,不能頻繁爬取。如果他們睡一會(huì )兒,他們就會(huì )被封鎖。 ,但可以使用代理ip。
<p>#-*-?encoding:?utf-8?-*-
'''
Created?on?2014-09-18?21:10:39
@author:?Mangoer
@email:?2395528746@qq.com
'''
import?urllib2
import?re
from?bs4?import?BeautifulSoup
import?random
import?time
class?CSDN_Blog_Spider:
?????def?__init__(self,url):
??????????print?'\n'
??????????print('已啟動(dòng)網(wǎng)絡(luò )爬蟲(chóng)。。。')
??????????print??'網(wǎng)頁(yè)地址:?'?+?url
??????????user_agents?=?[
????????????????????'Mozilla/5.0?(Windows;?U;?Windows?NT?5.1;?it;?rv:1.8.1.11)?Gecko/20071127?Firefox/2.0.0.11',
????????????????????'Opera/9.25?(Windows?NT?5.1;?U;?en)',
????????????????????'Mozilla/4.0?(compatible;?MSIE?6.0;?Windows?NT?5.1;?SV1;?.NET?CLR?1.1.4322;?.NET?CLR?2.0.50727)',
????????????????????'Mozilla/5.0?(compatible;?Konqueror/3.5;?Linux)?KHTML/3.5.5?(like?Gecko)?(Kubuntu)',
????????????????????'Mozilla/5.0?(X11;?U;?Linux?i686;?en-US;?rv:1.8.0.12)?Gecko/20070731?Ubuntu/dapper-security?Firefox/1.5.0.12',
????????????????????'Lynx/2.8.5rel.1?libwww-FM/2.14?SSL-MM/1.4.1?GNUTLS/1.2.9',
????????????????????"Mozilla/5.0?(X11;?Linux?i686)?AppleWebKit/535.7?(KHTML,?like?Gecko)?Ubuntu/11.04?Chromium/16.0.912.77?Chrome/16.0.912.77?Safari/535.7",
????????????????????"Mozilla/5.0?(X11;?Ubuntu;?Linux?i686;?rv:10.0)?Gecko/20100101?Firefox/10.0?",
???????????????????]
??????????#?use?proxy?ip?
??????????#?ips_list?=?['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118',
??????????#???????????'1.50.235.82:80','203.80.144.4:80']
??????????#?ip?=?random.choice(ips_list)
??????????#?print?'使用的代理ip地址:?'?+?ip
??????????#?proxy_support?=?urllib2.ProxyHandler({'http':'http://'+ip})
??????????#?opener?=?urllib2.build_opener(proxy_support)
??????????#?urllib2.install_opener(opener)
??????????agent?=?random.choice(user_agents)
??????????req?=?urllib2.Request(url)
??????????req.add_header('User-Agent',agent)
??????????req.add_header('Host','blog.csdn.net')
??????????req.add_header('Accept','*/*')
??????????req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list')
??????????req.add_header('GET',url)
??????????html?=?urllib2.urlopen(req)
??????????page?=?html.read().decode('gbk','ignore').encode('utf-8')
??????????self.page?=?page
??????????self.title?=?self.getTitle()
??????????self.content?=?self.getContent()
??????????self.saveFile()
??????????
?????def?printInfo(self):
??????????print('文章標題是:???'+self.title?+?'\n')?????????
??????????print('內容已經(jīng)存儲到out.txt文件中!')
?????def?getTitle(self):
??????????rex?=?re.compile('(.*?)',re.DOTALL)??????????
??????????match?=?rex.search(self.page)
??????????if?match:
????????????????return?match.group(1)
??????????return?'NO?TITLE'
?????def?getContent(self):
??????????bs?=?BeautifulSoup(self.page)
??????????html_content_list?=?bs.findAll('div',{'id':'article_content','class':'article_content'})
??????????html_content?=?str(html_content_list[0])
??????????rex_p?=?re.compile(r'(?:.*?)>(.*?)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(簡(jiǎn)要的實(shí)現Python爬蟲(chóng)爬取百度貼吧頁(yè)面上的圖片)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-03-05 22:07
Python爬蟲(chóng)爬取百度貼吧頁(yè)面圖片的簡(jiǎn)單實(shí)現,下面這個(gè)網(wǎng)頁(yè)就是本博客要爬取的網(wǎng)頁(yè),當然你看到的只是圖片的一部分,也就是要爬取的頁(yè)面被爬行,
下圖是最終爬取的圖片:
接下來(lái)簡(jiǎn)單說(shuō)一下爬取的全過(guò)程:
首先,你需要一個(gè)好的編程工具。博主使用的是他們覺(jué)得更容易使用的 Pycharm 工具。這是Pycharm官網(wǎng)下載的下載地址。您可以根據自己的電腦配置下載。是的,網(wǎng)上還有很多,可以參考。
下一步是編寫(xiě)爬蟲(chóng)代碼。先不說(shuō)代碼:
<p>import urllib.request
import re
import os
''' 這是需要引入的三個(gè)文件包 '''
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'mozilla/5.0 (windows nt 6.3; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36')
'''User_Ahent是爬蟲(chóng)所需要模擬瀏覽器訪(fǎng)問(wèn)所需要的一些標識信息,如瀏覽器類(lèi)型,操作系統等'''
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html):
p = r' 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(簡(jiǎn)要的實(shí)現Python爬蟲(chóng)爬取百度貼吧頁(yè)面上的圖片)
Python爬蟲(chóng)爬取百度貼吧頁(yè)面圖片的簡(jiǎn)單實(shí)現,下面這個(gè)網(wǎng)頁(yè)就是本博客要爬取的網(wǎng)頁(yè),當然你看到的只是圖片的一部分,也就是要爬取的頁(yè)面被爬行,
下圖是最終爬取的圖片:
接下來(lái)簡(jiǎn)單說(shuō)一下爬取的全過(guò)程:
首先,你需要一個(gè)好的編程工具。博主使用的是他們覺(jué)得更容易使用的 Pycharm 工具。這是Pycharm官網(wǎng)下載的下載地址。您可以根據自己的電腦配置下載。是的,網(wǎng)上還有很多,可以參考。
下一步是編寫(xiě)爬蟲(chóng)代碼。先不說(shuō)代碼:
<p>import urllib.request
import re
import os
''' 這是需要引入的三個(gè)文件包 '''
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'mozilla/5.0 (windows nt 6.3; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36')
'''User_Ahent是爬蟲(chóng)所需要模擬瀏覽器訪(fǎng)問(wèn)所需要的一些標識信息,如瀏覽器類(lèi)型,操作系統等'''
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html):
p = r'
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(【干貨】網(wǎng)頁(yè)的壁紙都爬取了,你知道嗎?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 64 次瀏覽 ? 2022-03-05 04:12
前言
我想每個(gè)人都更喜歡漂亮的照片!不要隱瞞任何事情,每個(gè)人都知道對美麗的熱愛(ài)。小編最近也比較無(wú)聊,就去爬壁紙、圖片等。所以我添加了一些代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)的所有壁紙。
目錄 1:概述
在電腦上,創(chuàng )建一個(gè)文件夾,用來(lái)存放爬到對方桌面的圖片
這個(gè)文件夾下有25個(gè)文件夾,對應分類(lèi)
每個(gè)分類(lèi)文件夾下有幾個(gè)文件夾,對應頁(yè)碼
在頁(yè)碼文件夾下,存放圖片文件
目錄二:環(huán)境準備
在終端中分別輸入以下 pip 命令進(jìn)行安裝
python -m pip install beautifulsoup4
python -m pip install lxml
python -m pip install requests
內容三:分析頁(yè)面結構
4k類(lèi)別下的壁紙是網(wǎng)站收入的重要資源,我們對4k壁紙有需求,所以不抓取
我用審美類(lèi)下的壁紙來(lái)講解下如何爬取圖片
1.一共73頁(yè),除了最后一頁(yè),每頁(yè)18張圖片
但是在代碼中,我們最好需要自動(dòng)獲取總頁(yè)碼,嗯,對方桌面壁紙網(wǎng)站的結構真的很舒服,基本上每個(gè)頁(yè)碼的html結構都差不多
CSS選擇器:div.page a,定位到包裹頁(yè)數的a標簽,只有6個(gè)
并且每頁(yè)第三張圖片是同一個(gè)廣告,需要在代碼中過(guò)濾掉
每個(gè)分頁(yè)的超鏈接清晰:/weimei/index_x.htm
x 正是頁(yè)面的頁(yè)碼
注意:您在類(lèi)別下看到的圖片是低分辨率的縮略圖;要得到分辨率為1920×1080的圖片,需要進(jìn)行兩次跳轉
下圖是一個(gè)例子
在分類(lèi)頁(yè)面中,我們可以直接獲取圖片的url,但遺憾的是,它的分辨率并不理想;
通過(guò)檢查,很明顯類(lèi)別頁(yè)面中顯示的每個(gè)圖像都指向另一個(gè)超鏈接
CSS選擇器:div#main div.list ul li a,定位到包裹圖片的a標簽
點(diǎn)擊圖片,第一次跳轉,跳轉到新鏈接,頁(yè)面顯示如下內容:
CSS選擇器:div#main div.endpage div.pic div.pic-down a,找到包裹圖片的a標簽
點(diǎn)擊按鈕下載壁紙(1920×1080),第二次跳轉,轉向新鏈接,最終達到目的,鏈接中顯示的圖片分辨率為1920×1080
幾經(jīng)周折,終于為我找到了圖片的1920×1080高清圖
CSS選擇器:div#main table a img,定位圖片的img標簽
經(jīng)過(guò)我自己的爬蟲(chóng)檢查,很少有圖片因為很多碎片問(wèn)題而無(wú)法下載,還有少數圖片是因為網(wǎng)站雖然提供了1920×1080分辨率的下載按鈕,但還是給了其他決議。
目錄4:代碼分析
第一步:設置全局變量
index = 'http://www.netbian.com' # 網(wǎng)站根地址
interval = 10 # 爬取圖片的間隔時(shí)間
firstDir = 'D:/zgh/Pictures/netbian' # 總路徑
classificationDict = {} # 存放網(wǎng)站分類(lèi)子頁(yè)面的信息
第二步:獲取頁(yè)面過(guò)濾后的內容列表
def screen(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers()) # 隨機獲取一個(gè)headers
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)
第三步:獲取所有類(lèi)別的 URL
# 將分類(lèi)子頁(yè)面信息存放在字典中
def init_classification():
url = index
select = '#header > div.head > ul > li:nth-child(1) > div > a'
classifications = screen(url, select)
for c in classifications:
href = c.get('href') # 獲取的是相對地址
text = c.string # 獲取分類(lèi)名
if(text == '4k壁紙'): # 4k壁紙,因權限問(wèn)題無(wú)法爬取,直接跳過(guò)
continue
secondDir = firstDir + '/' + text # 分類(lèi)目錄
url = index + href # 分類(lèi)子頁(yè)面url
global classificationDict
classificationDict[text] = {
'path': secondDir,
'url': url
}
在接下來(lái)的代碼中,我將使用審美類(lèi)別下的壁紙來(lái)講解如何通過(guò)兩次跳轉鏈接爬取高清圖片
第四步:獲取分類(lèi)頁(yè)面下所有頁(yè)面的url
大多數類(lèi)別的分頁(yè)大于等于6頁(yè),可以直接使用上面定義的screen函數,select定義為div.page a,然后screen函數返回的列表中的第六個(gè)元素可以得到最后一個(gè)我們需要的頁(yè)碼
但是,有些類(lèi)別的頁(yè)數少于 6 頁(yè),例如:
您需要重寫(xiě)一個(gè)過(guò)濾器函數以通過(guò)兄弟元素獲取它
# 獲取頁(yè)碼
def screenPage(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers())
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)[0].next_sibling.text
獲取分類(lèi)頁(yè)面下所有分頁(yè)的url
url = 'http://www.netbian.com/weimei/'
select = '#main > div.page > span.slh'
pageIndex = screenPage(secondUrl, select)
lastPagenum = int(pageIndex) # 獲取最后一頁(yè)的頁(yè)碼
for i in range(lastPagenum):
if i == 0:
url = 'http://www.netbian.com/weimei/index.htm'
else:
url = 'http://www.netbian.com/weimei/ ... 39%3B %(i+1)
由于網(wǎng)站的HTML結構非常清晰,代碼寫(xiě)起來(lái)也很簡(jiǎn)單
第五步:獲取分頁(yè)下圖片指向的URL
通過(guò)查看可以看到獲取到的url是相對地址,需要轉換成絕對地址
select = 'div#main div.list ul li a'
imgUrls = screen(url, select)
這兩行代碼得到的列表中的值是這樣的:
星空 女孩 觀(guān)望 唯美夜景壁紙
第 6 步:找到 1920 × 1080 分辨率的圖像
# 定位到 1920 1080 分辨率圖片
def handleImgs(links, path):
for link in links:
href = link.get('href')
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
# 第一次跳轉
if('http://' in href): # 有極個(gè)別圖片不提供正確的相對地址
url = href
else:
url = index + href
select = 'div#main div.endpage div.pic div.pic-down a'
link = screen(url, select)
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
href = link[0].get('href')
# 第二次跳轉
url = index + href
# 獲取到圖片了
select = 'div#main table a img'
link = screen(url, select)
if(link == []):
print(url + " 該圖片需要登錄才能爬取,爬取失敗")
continue
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
print(name) # 輸出下載圖片的文件名
src = link[0].get('src')
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
print()
download(src, name, path)
time.sleep(interval)
第 7 步:下載圖像
# 下載操作
def download(src, name, path):
if(isinstance(src, str)):
response = requests.get(src)
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
with open(path,'wb') as pic:
for chunk in response.iter_content(128):
pic.write(chunk)
目錄五:代碼容錯
1:過(guò)濾圖片廣告
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
二:第一次跳轉到頁(yè)面,沒(méi)有我們需要的鏈接
對方壁紙網(wǎng)站,給第一個(gè)跳轉頁(yè)面的鏈接一個(gè)相對地址
但是很少有圖片直接給出絕對地址,并且給出類(lèi)別URL,所以需要分兩步處理
if('http://' in href):
url = href
else:
url = index + href
...
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
以下是第二次跳轉頁(yè)面遇到的問(wèn)題
三:由于權限問(wèn)題無(wú)法爬取圖片
if(link == []):
print(url + "該圖片需要登錄才能爬取,爬取失敗")
continue
四:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)中帶有\t或者文件名中不允許出現的特殊字符:
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
五:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)重復
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
六:圖片鏈接404
例如
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
目錄 6:完整代碼
最后
動(dòng)動(dòng)你的小手發(fā)財,給小編一份關(guān)心是小編最大的動(dòng)力,謝謝! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(【干貨】網(wǎng)頁(yè)的壁紙都爬取了,你知道嗎?)
前言
我想每個(gè)人都更喜歡漂亮的照片!不要隱瞞任何事情,每個(gè)人都知道對美麗的熱愛(ài)。小編最近也比較無(wú)聊,就去爬壁紙、圖片等。所以我添加了一些代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)的所有壁紙。
目錄 1:概述
在電腦上,創(chuàng )建一個(gè)文件夾,用來(lái)存放爬到對方桌面的圖片

這個(gè)文件夾下有25個(gè)文件夾,對應分類(lèi)

每個(gè)分類(lèi)文件夾下有幾個(gè)文件夾,對應頁(yè)碼

在頁(yè)碼文件夾下,存放圖片文件
目錄二:環(huán)境準備
在終端中分別輸入以下 pip 命令進(jìn)行安裝
python -m pip install beautifulsoup4
python -m pip install lxml
python -m pip install requests
內容三:分析頁(yè)面結構

4k類(lèi)別下的壁紙是網(wǎng)站收入的重要資源,我們對4k壁紙有需求,所以不抓取

我用審美類(lèi)下的壁紙來(lái)講解下如何爬取圖片

1.一共73頁(yè),除了最后一頁(yè),每頁(yè)18張圖片

但是在代碼中,我們最好需要自動(dòng)獲取總頁(yè)碼,嗯,對方桌面壁紙網(wǎng)站的結構真的很舒服,基本上每個(gè)頁(yè)碼的html結構都差不多

CSS選擇器:div.page a,定位到包裹頁(yè)數的a標簽,只有6個(gè)
并且每頁(yè)第三張圖片是同一個(gè)廣告,需要在代碼中過(guò)濾掉
每個(gè)分頁(yè)的超鏈接清晰:/weimei/index_x.htm
x 正是頁(yè)面的頁(yè)碼
注意:您在類(lèi)別下看到的圖片是低分辨率的縮略圖;要得到分辨率為1920×1080的圖片,需要進(jìn)行兩次跳轉
下圖是一個(gè)例子

在分類(lèi)頁(yè)面中,我們可以直接獲取圖片的url,但遺憾的是,它的分辨率并不理想;
通過(guò)檢查,很明顯類(lèi)別頁(yè)面中顯示的每個(gè)圖像都指向另一個(gè)超鏈接

CSS選擇器:div#main div.list ul li a,定位到包裹圖片的a標簽
點(diǎn)擊圖片,第一次跳轉,跳轉到新鏈接,頁(yè)面顯示如下內容:

CSS選擇器:div#main div.endpage div.pic div.pic-down a,找到包裹圖片的a標簽
點(diǎn)擊按鈕下載壁紙(1920×1080),第二次跳轉,轉向新鏈接,最終達到目的,鏈接中顯示的圖片分辨率為1920×1080
幾經(jīng)周折,終于為我找到了圖片的1920×1080高清圖
CSS選擇器:div#main table a img,定位圖片的img標簽
經(jīng)過(guò)我自己的爬蟲(chóng)檢查,很少有圖片因為很多碎片問(wèn)題而無(wú)法下載,還有少數圖片是因為網(wǎng)站雖然提供了1920×1080分辨率的下載按鈕,但還是給了其他決議。
目錄4:代碼分析
第一步:設置全局變量
index = 'http://www.netbian.com' # 網(wǎng)站根地址
interval = 10 # 爬取圖片的間隔時(shí)間
firstDir = 'D:/zgh/Pictures/netbian' # 總路徑
classificationDict = {} # 存放網(wǎng)站分類(lèi)子頁(yè)面的信息
第二步:獲取頁(yè)面過(guò)濾后的內容列表
def screen(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers()) # 隨機獲取一個(gè)headers
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)

第三步:獲取所有類(lèi)別的 URL
# 將分類(lèi)子頁(yè)面信息存放在字典中
def init_classification():
url = index
select = '#header > div.head > ul > li:nth-child(1) > div > a'
classifications = screen(url, select)
for c in classifications:
href = c.get('href') # 獲取的是相對地址
text = c.string # 獲取分類(lèi)名
if(text == '4k壁紙'): # 4k壁紙,因權限問(wèn)題無(wú)法爬取,直接跳過(guò)
continue
secondDir = firstDir + '/' + text # 分類(lèi)目錄
url = index + href # 分類(lèi)子頁(yè)面url
global classificationDict
classificationDict[text] = {
'path': secondDir,
'url': url
}
在接下來(lái)的代碼中,我將使用審美類(lèi)別下的壁紙來(lái)講解如何通過(guò)兩次跳轉鏈接爬取高清圖片
第四步:獲取分類(lèi)頁(yè)面下所有頁(yè)面的url
大多數類(lèi)別的分頁(yè)大于等于6頁(yè),可以直接使用上面定義的screen函數,select定義為div.page a,然后screen函數返回的列表中的第六個(gè)元素可以得到最后一個(gè)我們需要的頁(yè)碼
但是,有些類(lèi)別的頁(yè)數少于 6 頁(yè),例如:

您需要重寫(xiě)一個(gè)過(guò)濾器函數以通過(guò)兄弟元素獲取它
# 獲取頁(yè)碼
def screenPage(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers())
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)[0].next_sibling.text
獲取分類(lèi)頁(yè)面下所有分頁(yè)的url
url = 'http://www.netbian.com/weimei/'
select = '#main > div.page > span.slh'
pageIndex = screenPage(secondUrl, select)
lastPagenum = int(pageIndex) # 獲取最后一頁(yè)的頁(yè)碼
for i in range(lastPagenum):
if i == 0:
url = 'http://www.netbian.com/weimei/index.htm'
else:
url = 'http://www.netbian.com/weimei/ ... 39%3B %(i+1)
由于網(wǎng)站的HTML結構非常清晰,代碼寫(xiě)起來(lái)也很簡(jiǎn)單
第五步:獲取分頁(yè)下圖片指向的URL
通過(guò)查看可以看到獲取到的url是相對地址,需要轉換成絕對地址

select = 'div#main div.list ul li a'
imgUrls = screen(url, select)
這兩行代碼得到的列表中的值是這樣的:

第 6 步:找到 1920 × 1080 分辨率的圖像
# 定位到 1920 1080 分辨率圖片
def handleImgs(links, path):
for link in links:
href = link.get('href')
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
# 第一次跳轉
if('http://' in href): # 有極個(gè)別圖片不提供正確的相對地址
url = href
else:
url = index + href
select = 'div#main div.endpage div.pic div.pic-down a'
link = screen(url, select)
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
href = link[0].get('href')
# 第二次跳轉
url = index + href
# 獲取到圖片了
select = 'div#main table a img'
link = screen(url, select)
if(link == []):
print(url + " 該圖片需要登錄才能爬取,爬取失敗")
continue
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
print(name) # 輸出下載圖片的文件名
src = link[0].get('src')
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
print()
download(src, name, path)
time.sleep(interval)
第 7 步:下載圖像
# 下載操作
def download(src, name, path):
if(isinstance(src, str)):
response = requests.get(src)
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
with open(path,'wb') as pic:
for chunk in response.iter_content(128):
pic.write(chunk)
目錄五:代碼容錯
1:過(guò)濾圖片廣告
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
二:第一次跳轉到頁(yè)面,沒(méi)有我們需要的鏈接
對方壁紙網(wǎng)站,給第一個(gè)跳轉頁(yè)面的鏈接一個(gè)相對地址
但是很少有圖片直接給出絕對地址,并且給出類(lèi)別URL,所以需要分兩步處理
if('http://' in href):
url = href
else:
url = index + href
...
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
以下是第二次跳轉頁(yè)面遇到的問(wèn)題
三:由于權限問(wèn)題無(wú)法爬取圖片
if(link == []):
print(url + "該圖片需要登錄才能爬取,爬取失敗")
continue
四:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)中帶有\t或者文件名中不允許出現的特殊字符:

name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
五:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)重復
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
六:圖片鏈接404
例如

if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
目錄 6:完整代碼

最后
動(dòng)動(dòng)你的小手發(fā)財,給小編一份關(guān)心是小編最大的動(dòng)力,謝謝!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(貓評論信息和圖片下載的二合一升級版() )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2022-03-04 19:07
)
之前我做過(guò)天貓評論信息抓取,還有評論圖片下載,但是那一次我把所有的信息都存到數據庫里,然后從數據庫中提取圖片信息下載。這次我做了信息爬取和圖片下載二合一升級版。
這一次,我們瞄準的是京東nike自營(yíng)店。
鏈接是:
老辦法,按F12打開(kāi)流量監控,點(diǎn)擊網(wǎng)絡(luò )中的js,然后在眾多信息中找到存放評論信息的鏈接,如下:
我找到的最后一個(gè)鏈接如下所示:
打開(kāi)鏈接后發(fā)現也是json格式的,很簡(jiǎn)單
先用urllib.request打開(kāi)鏈接,然后用json加載json文件,代碼如下:
url='https://sclub.jd.com/comment/p ... 39%3B
html = urllib.request.urlopen(url).read().decode('gbk')
jsondata = re.search(r'\{.*\}', html).group()
data = json.loads(jsondata)
這里使用正則是因為打開(kāi)ht??ml后發(fā)現是這樣的:
我們需要的json格式文件放在那個(gè)()里面。
得到j(luò )son格式的數據后,需要對數據進(jìn)行過(guò)濾。我把用戶(hù)名和評論等一些信息放入數據庫,圖片立即下載
先寫(xiě)一個(gè)循環(huán)遍歷當前url中的所有評論內容,部分代碼如下:
for i in range(0, len(data['comments'])):
id = data['comments'][i]['nickname']
# 用戶(hù)名
content = data['comments'][i]['content']
# 評論
time = data['comments'][i]['creationTime']
# 評論日期
type = data['comments'][i]['referenceName']
# 型號及顏色
在爬取圖片鏈接下載的時(shí)候,因為有些評論沒(méi)有圖片,所以需要判斷key是否存在。
if('images' in data['comments'][i].keys()):
如果存在,請獲取圖片鏈接,完成鏈接并下載:
pics = data['comments'][i]['images'][k]['imgUrl']
a='http:'+pics
urllib.request.urlretrieve(a, 'D:\jd_pics/' + str(z)+'_'+str(i+1) + '_' + 'pic' + '_' + str(k) + '.jpg')
# 買(mǎi)家秀,命名規則:第幾頁(yè)第幾條評論的第幾個(gè)圖片
對于后續審稿的爬取,大體思路同上,這里不再贅述。
最后就是考慮循環(huán)抓取了,只要寫(xiě)個(gè)循環(huán)就可以了
for j in range(0,150):
url='https://sclub.jd.com/comment/p ... 2Bstr(j)+'&pageSize=10&isShadowSku=0&fold=1'
我在這里嘗試抓取前150頁(yè)評論的內容,因為我要邊抓取邊下載圖片,所以需要很長(cháng)時(shí)間。我花了大約25分鐘,終于在數據庫中得到了1000條信息
和本地1216圖片
呵呵~這不對,150頁(yè)每頁(yè)10條信息,總數應該是1500!為什么我的數據庫中只有 1000 個(gè)條目?
我去百度了一下,一位前輩是這樣解釋的:
“在 MySQL 中,每個(gè)數據庫最多可以創(chuàng )建 20 億個(gè)表,一個(gè)表允許定義 1024 列,每行最大長(cháng)度為 8092 字節(不包括文本和圖像類(lèi)型的長(cháng)度)。
當表定義為 varchar、nvarchar 或 varbinary 類(lèi)型列時(shí),如果插入表中的數據行超過(guò) 8092 字節,則 Transact-SQL 語(yǔ)句將失敗并生成錯誤消息。
SQL對每張表的行數沒(méi)有直接限制,但受數據庫存儲空間的限制。
每個(gè)數據庫的最大空間是1048516TB,所以一個(gè)表的最大可用空間是1048516TB減去數據庫類(lèi)系統表和其他數據庫對象占用的空間。"
也就是說(shuō),一個(gè)數據庫的容量肯定是夠用的,那剩下的 500 條記錄到哪里去了呢?
找了半天,發(fā)現navicat for mysql有分頁(yè)功能,自動(dòng)幫我分頁(yè)
oh~傻哭自己
我是學(xué)生,剛開(kāi)始學(xué)習python爬蟲(chóng)。如果本文和代碼有漏洞,還望各位大神賜教,謝謝!
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(貓評論信息和圖片下載的二合一升級版()
)
之前我做過(guò)天貓評論信息抓取,還有評論圖片下載,但是那一次我把所有的信息都存到數據庫里,然后從數據庫中提取圖片信息下載。這次我做了信息爬取和圖片下載二合一升級版。
這一次,我們瞄準的是京東nike自營(yíng)店。
鏈接是:
老辦法,按F12打開(kāi)流量監控,點(diǎn)擊網(wǎng)絡(luò )中的js,然后在眾多信息中找到存放評論信息的鏈接,如下:
我找到的最后一個(gè)鏈接如下所示:
打開(kāi)鏈接后發(fā)現也是json格式的,很簡(jiǎn)單
先用urllib.request打開(kāi)鏈接,然后用json加載json文件,代碼如下:
url='https://sclub.jd.com/comment/p ... 39%3B
html = urllib.request.urlopen(url).read().decode('gbk')
jsondata = re.search(r'\{.*\}', html).group()
data = json.loads(jsondata)
這里使用正則是因為打開(kāi)ht??ml后發(fā)現是這樣的:
我們需要的json格式文件放在那個(gè)()里面。
得到j(luò )son格式的數據后,需要對數據進(jìn)行過(guò)濾。我把用戶(hù)名和評論等一些信息放入數據庫,圖片立即下載
先寫(xiě)一個(gè)循環(huán)遍歷當前url中的所有評論內容,部分代碼如下:
for i in range(0, len(data['comments'])):
id = data['comments'][i]['nickname']
# 用戶(hù)名
content = data['comments'][i]['content']
# 評論
time = data['comments'][i]['creationTime']
# 評論日期
type = data['comments'][i]['referenceName']
# 型號及顏色
在爬取圖片鏈接下載的時(shí)候,因為有些評論沒(méi)有圖片,所以需要判斷key是否存在。
if('images' in data['comments'][i].keys()):
如果存在,請獲取圖片鏈接,完成鏈接并下載:
pics = data['comments'][i]['images'][k]['imgUrl']
a='http:'+pics
urllib.request.urlretrieve(a, 'D:\jd_pics/' + str(z)+'_'+str(i+1) + '_' + 'pic' + '_' + str(k) + '.jpg')
# 買(mǎi)家秀,命名規則:第幾頁(yè)第幾條評論的第幾個(gè)圖片
對于后續審稿的爬取,大體思路同上,這里不再贅述。
最后就是考慮循環(huán)抓取了,只要寫(xiě)個(gè)循環(huán)就可以了
for j in range(0,150):
url='https://sclub.jd.com/comment/p ... 2Bstr(j)+'&pageSize=10&isShadowSku=0&fold=1'
我在這里嘗試抓取前150頁(yè)評論的內容,因為我要邊抓取邊下載圖片,所以需要很長(cháng)時(shí)間。我花了大約25分鐘,終于在數據庫中得到了1000條信息
和本地1216圖片
呵呵~這不對,150頁(yè)每頁(yè)10條信息,總數應該是1500!為什么我的數據庫中只有 1000 個(gè)條目?
我去百度了一下,一位前輩是這樣解釋的:
“在 MySQL 中,每個(gè)數據庫最多可以創(chuàng )建 20 億個(gè)表,一個(gè)表允許定義 1024 列,每行最大長(cháng)度為 8092 字節(不包括文本和圖像類(lèi)型的長(cháng)度)。
當表定義為 varchar、nvarchar 或 varbinary 類(lèi)型列時(shí),如果插入表中的數據行超過(guò) 8092 字節,則 Transact-SQL 語(yǔ)句將失敗并生成錯誤消息。
SQL對每張表的行數沒(méi)有直接限制,但受數據庫存儲空間的限制。
每個(gè)數據庫的最大空間是1048516TB,所以一個(gè)表的最大可用空間是1048516TB減去數據庫類(lèi)系統表和其他數據庫對象占用的空間。"
也就是說(shuō),一個(gè)數據庫的容量肯定是夠用的,那剩下的 500 條記錄到哪里去了呢?
找了半天,發(fā)現navicat for mysql有分頁(yè)功能,自動(dòng)幫我分頁(yè)

oh~傻哭自己


我是學(xué)生,剛開(kāi)始學(xué)習python爬蟲(chóng)。如果本文和代碼有漏洞,還望各位大神賜教,謝謝!

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(大數據技術(shù)被用于各行各業(yè),一切都是有不同的處理方式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 54 次瀏覽 ? 2022-03-04 07:17
大數據技術(shù)現在應用在各行各業(yè),回歸、SVM、神經(jīng)網(wǎng)絡(luò )、文本分析……各種真棒的模擬和預測,但沒(méi)有數據,一切都是空談!許多人使用爬蟲(chóng)來(lái)采集網(wǎng)頁(yè)信息。問(wèn)題是爬下來(lái)的數據有什么用。這取決于個(gè)人的能力。對于同樣的數據,不同的人會(huì )有不同的處理方式,會(huì )導致不同的結果。下面為您介紹一些典型的應用場(chǎng)景:
1、電子商務(wù)網(wǎng)站的產(chǎn)品數據
爬取了某個(gè)行業(yè)的產(chǎn)品信息,包括品牌、價(jià)格、銷(xiāo)量、規格型號等。然后分析該行業(yè)的暢銷(xiāo)品牌、暢銷(xiāo)品類(lèi)、價(jià)格趨勢、行業(yè)前景等。信息量還是很大的。
2、微博/BBS輿情數據
針對某個(gè)話(huà)題,從微博和論壇中抓取相關(guān)信息,挖掘該話(huà)題的一些有趣的輿情信息。事實(shí)上,利用爬蟲(chóng)進(jìn)行輿情監測是比較成熟的,很多大公司都有相關(guān)的監測部門(mén)。但是微博的反爬機制比較麻煩,部分數據采集不完整。
3、新聞?wù)?br /> 新聞文字其實(shí)是一種輿論,但比微博上的文字更正式。在百度新聞上爬取某個(gè)關(guān)鍵詞的信息,每周梳理幾條關(guān)鍵詞,可以掌握行業(yè)動(dòng)態(tài)。
4、學(xué)術(shù)信息
抓取一些關(guān)于學(xué)術(shù)網(wǎng)站 的信息以供學(xué)習和研究。比如在CNKI上,如果你輸入一個(gè)關(guān)鍵詞,比如大數據,就會(huì )出現很多與大數據相關(guān)的文獻。
點(diǎn)擊進(jìn)入,會(huì )有每個(gè)文檔的基本信息、摘要等信息。如果你是研究人員或學(xué)生,點(diǎn)擊并一一記錄下來(lái)太費時(shí)間了。寫(xiě)一個(gè)爬蟲(chóng),你可以按照標準格式爬取所有的數據,然后閱讀和進(jìn)一步分析就會(huì )方便很多。. 使用 GooSeeker 爬蟲(chóng)可以輕松地采集 批量下載此類(lèi)網(wǎng)頁(yè)。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(大數據技術(shù)被用于各行各業(yè),一切都是有不同的處理方式)
大數據技術(shù)現在應用在各行各業(yè),回歸、SVM、神經(jīng)網(wǎng)絡(luò )、文本分析……各種真棒的模擬和預測,但沒(méi)有數據,一切都是空談!許多人使用爬蟲(chóng)來(lái)采集網(wǎng)頁(yè)信息。問(wèn)題是爬下來(lái)的數據有什么用。這取決于個(gè)人的能力。對于同樣的數據,不同的人會(huì )有不同的處理方式,會(huì )導致不同的結果。下面為您介紹一些典型的應用場(chǎng)景:
1、電子商務(wù)網(wǎng)站的產(chǎn)品數據
爬取了某個(gè)行業(yè)的產(chǎn)品信息,包括品牌、價(jià)格、銷(xiāo)量、規格型號等。然后分析該行業(yè)的暢銷(xiāo)品牌、暢銷(xiāo)品類(lèi)、價(jià)格趨勢、行業(yè)前景等。信息量還是很大的。
2、微博/BBS輿情數據
針對某個(gè)話(huà)題,從微博和論壇中抓取相關(guān)信息,挖掘該話(huà)題的一些有趣的輿情信息。事實(shí)上,利用爬蟲(chóng)進(jìn)行輿情監測是比較成熟的,很多大公司都有相關(guān)的監測部門(mén)。但是微博的反爬機制比較麻煩,部分數據采集不完整。
3、新聞?wù)?br /> 新聞文字其實(shí)是一種輿論,但比微博上的文字更正式。在百度新聞上爬取某個(gè)關(guān)鍵詞的信息,每周梳理幾條關(guān)鍵詞,可以掌握行業(yè)動(dòng)態(tài)。
4、學(xué)術(shù)信息
抓取一些關(guān)于學(xué)術(shù)網(wǎng)站 的信息以供學(xué)習和研究。比如在CNKI上,如果你輸入一個(gè)關(guān)鍵詞,比如大數據,就會(huì )出現很多與大數據相關(guān)的文獻。
點(diǎn)擊進(jìn)入,會(huì )有每個(gè)文檔的基本信息、摘要等信息。如果你是研究人員或學(xué)生,點(diǎn)擊并一一記錄下來(lái)太費時(shí)間了。寫(xiě)一個(gè)爬蟲(chóng),你可以按照標準格式爬取所有的數據,然后閱讀和進(jìn)一步分析就會(huì )方便很多。. 使用 GooSeeker 爬蟲(chóng)可以輕松地采集 批量下載此類(lèi)網(wǎng)頁(yè)。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)站一般如何實(shí)現圖片懶技術(shù)呢?-八維教育)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2022-03-03 14:05
關(guān)鍵詞:
逆流而上,用力撐著(zhù)它,一分一毫的懈怠,它就退卻了萬(wàn)千搜索。本文章主要介紹了python網(wǎng)絡(luò )爬蟲(chóng)的圖片懶加載技術(shù)selenium和PhantomJS相關(guān)的知識,希望對大家有所幫助。
一.什么是圖片延遲加載?
- 案例研究:抓取站長(cháng)素材中的圖片數據
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘)
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
運行結果觀(guān)察我們可以得到圖片的名字,但是得到的鏈接是空的。檢查后發(fā)現xpath表達式?jīng)]有問(wèn)題。是什么原因?
- 圖片延遲加載概念:
圖片延遲加載是一種網(wǎng)頁(yè)優(yōu)化技術(shù)。圖片作為一種網(wǎng)絡(luò )資源,在被請求的時(shí)候會(huì )占用網(wǎng)絡(luò )資源,一次加載整個(gè)頁(yè)面的所有圖片會(huì )大大增加頁(yè)面首屏的加載時(shí)間。為了解決這個(gè)問(wèn)題,通過(guò)前后端的配合,圖片只有出現在瀏覽器當前窗口時(shí)才加載,減少首屏圖片請求次數的技術(shù)稱(chēng)為“圖片懶加載” ”。
- 網(wǎng)站一般如何實(shí)現延遲圖片加載技術(shù)?
在網(wǎng)頁(yè)的源碼中,首先在img標簽中使用了一個(gè)“偽屬性”(通常是src2,original...)來(lái)存儲真實(shí)的圖片鏈接,而不是直接存儲在src屬性中。當圖片出現在頁(yè)面可視區域時(shí),偽屬性會(huì )被動(dòng)態(tài)替換為src屬性,完成圖片的加載。
- 站長(cháng)素材案例后續分析:仔細觀(guān)察頁(yè)面結構后發(fā)現,網(wǎng)頁(yè)中圖片的鏈接存放在偽屬性src2中
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘2) #src2偽屬性
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
二.硒
- 什么是硒?
它是 Python 的第三方庫。外部提供的界面可以操作瀏覽器,然后讓瀏覽器完成自動(dòng)操作。
- 環(huán)境建設
1.安裝硒:pip install selenium
2.獲取瀏覽器驅動(dòng)(以谷歌瀏覽器為例)
2.1 谷歌瀏覽器驅動(dòng)下載地址:
2.2 下載的驅動(dòng)必須和瀏覽器版本一致??梢愿鶕峁┑陌姹居成浔磉M(jìn)行映射
- 效果展示:可以運行以下代碼觀(guān)看效果
from selenium import webdriver
from time import sleep
# 后面是你的瀏覽器驅動(dòng)位置,記得前面加r‘‘,‘r‘是防止字符轉義的
driver = webdriver.Chrome(r‘驅動(dòng)程序路徑‘)
# 用get打開(kāi)百度頁(yè)面
driver.get("http://www.baidu.com")
# 查找頁(yè)面的“設置”選項,并進(jìn)行點(diǎn)擊
driver.find_elements_by_link_text(‘設置‘)[0].click()
sleep(2)
# # 打開(kāi)設置后找到“搜索設置”選項,設置為每頁(yè)顯示50條
driver.find_elements_by_link_text(‘搜索設置‘)[0].click()
sleep(2)
# 選中每頁(yè)顯示50條
m = driver.find_element_by_id(‘nr‘)
sleep(2)
m.find_element_by_xpath(‘//*[@id="nr"]/option[3]‘).click()
m.find_element_by_xpath(‘.//option[3]‘).click()
sleep(2)
# 點(diǎn)擊保存設置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)
# 處理彈出的警告頁(yè)面 確定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的輸入框,并輸入 美女
driver.find_element_by_id(‘kw‘).send_keys(‘美女‘)
sleep(2)
# 點(diǎn)擊搜索按鈕
driver.find_element_by_id(‘su‘).click()
sleep(2)
# 在打開(kāi)的頁(yè)面中找到“Selenium - 開(kāi)源中國社區”,并打開(kāi)這個(gè)頁(yè)面
driver.find_elements_by_link_text(‘美女_百度圖片‘)[0].click()
sleep(3)
# 關(guān)閉瀏覽器
driver.quit()
- 代碼操作:
#導包
from selenium import webdriver
#創(chuàng )建瀏覽器對象,通過(guò)該對象可以操作瀏覽器
browser = webdriver.Chrome(‘驅動(dòng)路徑‘)
#使用瀏覽器發(fā)起指定請求
browser.get(url)
#使用下面的方法,查找指定的元素進(jìn)行操作即可
find_element_by_id 根據id找節點(diǎn)
find_elements_by_name 根據name找
find_elements_by_xpath 根據xpath查找
find_elements_by_tag_name 根據標簽名找
find_elements_by_class_name 根據class名字查找
三.幻影JS
PhantomJS 是一款非界面瀏覽器,其自動(dòng)化操作過(guò)程與上述谷歌瀏覽器的操作一致。由于沒(méi)有界面,為了能夠展示自動(dòng)化的操作過(guò)程,PhantomJS為用戶(hù)提供了截圖功能,使用save_screenshot函數實(shí)現。
-案子:
from selenium import webdriver
import time
# phantomjs路徑
path = r‘PhantomJS驅動(dòng)路徑‘
browser = webdriver.PhantomJS(path)
# 打開(kāi)百度
url = ‘http://www.baidu.com/‘
browser.get(url)
time.sleep(3)
browser.save_screenshot(r‘phantomjsaidu.png‘)
# 查找input輸入框
my_input = browser.find_element_by_id(‘kw‘)
# 往框里面寫(xiě)文字
my_input.send_keys(‘美女‘)
time.sleep(3)
#截屏
browser.save_screenshot(r‘phantomjsmeinv.png‘)
# 查找搜索按鈕
button = browser.find_elements_by_class_name(‘s_btn‘)[0]
button.click()
time.sleep(3)
browser.save_screenshot(r‘phantomjsshow.png‘)
time.sleep(3)
browser.quit()
【重點(diǎn)】selenium+phantomjs是爬蟲(chóng)的終極解決方案:網(wǎng)站上的一些內容信息是通過(guò)動(dòng)態(tài)加載js形成的,所以使用普通爬蟲(chóng)程序無(wú)法回到動(dòng)態(tài)加載的js內容。例如,豆瓣電影中的電影信息是通過(guò)下拉操作動(dòng)態(tài)加載更多電影信息的。
綜合操作:
- 要求:盡可能多地在豆瓣上爬取電影信息
from selenium import webdriver
from time import sleep
import time
if __name__ == ‘__main__‘:
url = ‘https://movie.douban.com/typer ... on%3D‘
# 發(fā)起請求前,可以讓url表示的頁(yè)面動(dòng)態(tài)加載出更多的數據
path = r‘C:UsersAdministratorDesktop爬蟲(chóng)授課day05ziliaophantomjs-2.1.1-windowsinphantomjs.exe‘
# 創(chuàng )建無(wú)界面的瀏覽器對象
bro = webdriver.PhantomJS(path)
# 發(fā)起url請求
bro.get(url)
time.sleep(3)
# 截圖
bro.save_screenshot(‘1.png‘)
# 執行js代碼(讓滾動(dòng)條向下偏移n個(gè)像素(作用:動(dòng)態(tài)加載了更多的電影信息))
js = ‘document.body.scrollTop=2000‘
bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼
time.sleep(4)
bro.save_screenshot(‘2.png‘)
time.sleep(2)
# 使用爬蟲(chóng)程序爬去當前url中的內容
html_source = bro.page_source # 該屬性可以獲取當前瀏覽器的當前頁(yè)的源碼(html)
with open(‘./source.html‘, ‘w‘, encoding=‘utf-8‘) as fp:
fp.write(html_source)
bro.quit()
四.谷歌無(wú)頭瀏覽器
由于 PhantomJs 最近已經(jīng)停止更新和維護,建議大家使用谷歌的無(wú)頭瀏覽器,這是一款沒(méi)有界面的谷歌瀏覽器。
1 from selenium import webdriver
2 from selenium.webdriver.chrome.options import Options
3 import time
4
5 # 創(chuàng )建一個(gè)參數對象,用來(lái)控制chrome以無(wú)界面模式打開(kāi)
6 chrome_options = Options()
7 chrome_options.add_argument(‘--headless‘)
8 chrome_options.add_argument(‘--disable-gpu‘)
9 # 驅動(dòng)路徑
10 path = r‘C:UsersBLiDesktop1801day05ziliaochromedriver.exe‘
11
12 # 創(chuàng )建瀏覽器對象
13 browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
14
15 # 上網(wǎng)
16 url = ‘http://www.baidu.com/‘
17 browser.get(url)
18 time.sleep(3)
19
20 browser.save_screenshot(‘baidu.png‘)
21
22 browser.quit()
至此,這篇關(guān)于Python網(wǎng)絡(luò )爬蟲(chóng)selenium和PhantomJS的懶加載技術(shù)的文章就講完了。如果您的問(wèn)題無(wú)法解決,請參考以下文章: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)站一般如何實(shí)現圖片懶技術(shù)呢?-八維教育)
關(guān)鍵詞:
逆流而上,用力撐著(zhù)它,一分一毫的懈怠,它就退卻了萬(wàn)千搜索。本文章主要介紹了python網(wǎng)絡(luò )爬蟲(chóng)的圖片懶加載技術(shù)selenium和PhantomJS相關(guān)的知識,希望對大家有所幫助。
一.什么是圖片延遲加載?
- 案例研究:抓取站長(cháng)素材中的圖片數據
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘)
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
運行結果觀(guān)察我們可以得到圖片的名字,但是得到的鏈接是空的。檢查后發(fā)現xpath表達式?jīng)]有問(wèn)題。是什么原因?
- 圖片延遲加載概念:
圖片延遲加載是一種網(wǎng)頁(yè)優(yōu)化技術(shù)。圖片作為一種網(wǎng)絡(luò )資源,在被請求的時(shí)候會(huì )占用網(wǎng)絡(luò )資源,一次加載整個(gè)頁(yè)面的所有圖片會(huì )大大增加頁(yè)面首屏的加載時(shí)間。為了解決這個(gè)問(wèn)題,通過(guò)前后端的配合,圖片只有出現在瀏覽器當前窗口時(shí)才加載,減少首屏圖片請求次數的技術(shù)稱(chēng)為“圖片懶加載” ”。
- 網(wǎng)站一般如何實(shí)現延遲圖片加載技術(shù)?
在網(wǎng)頁(yè)的源碼中,首先在img標簽中使用了一個(gè)“偽屬性”(通常是src2,original...)來(lái)存儲真實(shí)的圖片鏈接,而不是直接存儲在src屬性中。當圖片出現在頁(yè)面可視區域時(shí),偽屬性會(huì )被動(dòng)態(tài)替換為src屬性,完成圖片的加載。
- 站長(cháng)素材案例后續分析:仔細觀(guān)察頁(yè)面結構后發(fā)現,網(wǎng)頁(yè)中圖片的鏈接存放在偽屬性src2中
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘2) #src2偽屬性
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
二.硒
- 什么是硒?
它是 Python 的第三方庫。外部提供的界面可以操作瀏覽器,然后讓瀏覽器完成自動(dòng)操作。
- 環(huán)境建設
1.安裝硒:pip install selenium
2.獲取瀏覽器驅動(dòng)(以谷歌瀏覽器為例)
2.1 谷歌瀏覽器驅動(dòng)下載地址:
2.2 下載的驅動(dòng)必須和瀏覽器版本一致??梢愿鶕峁┑陌姹居成浔磉M(jìn)行映射
- 效果展示:可以運行以下代碼觀(guān)看效果
from selenium import webdriver
from time import sleep
# 后面是你的瀏覽器驅動(dòng)位置,記得前面加r‘‘,‘r‘是防止字符轉義的
driver = webdriver.Chrome(r‘驅動(dòng)程序路徑‘)
# 用get打開(kāi)百度頁(yè)面
driver.get("http://www.baidu.com")
# 查找頁(yè)面的“設置”選項,并進(jìn)行點(diǎn)擊
driver.find_elements_by_link_text(‘設置‘)[0].click()
sleep(2)
# # 打開(kāi)設置后找到“搜索設置”選項,設置為每頁(yè)顯示50條
driver.find_elements_by_link_text(‘搜索設置‘)[0].click()
sleep(2)
# 選中每頁(yè)顯示50條
m = driver.find_element_by_id(‘nr‘)
sleep(2)
m.find_element_by_xpath(‘//*[@id="nr"]/option[3]‘).click()
m.find_element_by_xpath(‘.//option[3]‘).click()
sleep(2)
# 點(diǎn)擊保存設置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)
# 處理彈出的警告頁(yè)面 確定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的輸入框,并輸入 美女
driver.find_element_by_id(‘kw‘).send_keys(‘美女‘)
sleep(2)
# 點(diǎn)擊搜索按鈕
driver.find_element_by_id(‘su‘).click()
sleep(2)
# 在打開(kāi)的頁(yè)面中找到“Selenium - 開(kāi)源中國社區”,并打開(kāi)這個(gè)頁(yè)面
driver.find_elements_by_link_text(‘美女_百度圖片‘)[0].click()
sleep(3)
# 關(guān)閉瀏覽器
driver.quit()
- 代碼操作:
#導包
from selenium import webdriver
#創(chuàng )建瀏覽器對象,通過(guò)該對象可以操作瀏覽器
browser = webdriver.Chrome(‘驅動(dòng)路徑‘)
#使用瀏覽器發(fā)起指定請求
browser.get(url)
#使用下面的方法,查找指定的元素進(jìn)行操作即可
find_element_by_id 根據id找節點(diǎn)
find_elements_by_name 根據name找
find_elements_by_xpath 根據xpath查找
find_elements_by_tag_name 根據標簽名找
find_elements_by_class_name 根據class名字查找
三.幻影JS
PhantomJS 是一款非界面瀏覽器,其自動(dòng)化操作過(guò)程與上述谷歌瀏覽器的操作一致。由于沒(méi)有界面,為了能夠展示自動(dòng)化的操作過(guò)程,PhantomJS為用戶(hù)提供了截圖功能,使用save_screenshot函數實(shí)現。
-案子:
from selenium import webdriver
import time
# phantomjs路徑
path = r‘PhantomJS驅動(dòng)路徑‘
browser = webdriver.PhantomJS(path)
# 打開(kāi)百度
url = ‘http://www.baidu.com/‘
browser.get(url)
time.sleep(3)
browser.save_screenshot(r‘phantomjsaidu.png‘)
# 查找input輸入框
my_input = browser.find_element_by_id(‘kw‘)
# 往框里面寫(xiě)文字
my_input.send_keys(‘美女‘)
time.sleep(3)
#截屏
browser.save_screenshot(r‘phantomjsmeinv.png‘)
# 查找搜索按鈕
button = browser.find_elements_by_class_name(‘s_btn‘)[0]
button.click()
time.sleep(3)
browser.save_screenshot(r‘phantomjsshow.png‘)
time.sleep(3)
browser.quit()
【重點(diǎn)】selenium+phantomjs是爬蟲(chóng)的終極解決方案:網(wǎng)站上的一些內容信息是通過(guò)動(dòng)態(tài)加載js形成的,所以使用普通爬蟲(chóng)程序無(wú)法回到動(dòng)態(tài)加載的js內容。例如,豆瓣電影中的電影信息是通過(guò)下拉操作動(dòng)態(tài)加載更多電影信息的。
綜合操作:
- 要求:盡可能多地在豆瓣上爬取電影信息
from selenium import webdriver
from time import sleep
import time
if __name__ == ‘__main__‘:
url = ‘https://movie.douban.com/typer ... on%3D‘
# 發(fā)起請求前,可以讓url表示的頁(yè)面動(dòng)態(tài)加載出更多的數據
path = r‘C:UsersAdministratorDesktop爬蟲(chóng)授課day05ziliaophantomjs-2.1.1-windowsinphantomjs.exe‘
# 創(chuàng )建無(wú)界面的瀏覽器對象
bro = webdriver.PhantomJS(path)
# 發(fā)起url請求
bro.get(url)
time.sleep(3)
# 截圖
bro.save_screenshot(‘1.png‘)
# 執行js代碼(讓滾動(dòng)條向下偏移n個(gè)像素(作用:動(dòng)態(tài)加載了更多的電影信息))
js = ‘document.body.scrollTop=2000‘
bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼
time.sleep(4)
bro.save_screenshot(‘2.png‘)
time.sleep(2)
# 使用爬蟲(chóng)程序爬去當前url中的內容
html_source = bro.page_source # 該屬性可以獲取當前瀏覽器的當前頁(yè)的源碼(html)
with open(‘./source.html‘, ‘w‘, encoding=‘utf-8‘) as fp:
fp.write(html_source)
bro.quit()
四.谷歌無(wú)頭瀏覽器
由于 PhantomJs 最近已經(jīng)停止更新和維護,建議大家使用谷歌的無(wú)頭瀏覽器,這是一款沒(méi)有界面的谷歌瀏覽器。
1 from selenium import webdriver
2 from selenium.webdriver.chrome.options import Options
3 import time
4
5 # 創(chuàng )建一個(gè)參數對象,用來(lái)控制chrome以無(wú)界面模式打開(kāi)
6 chrome_options = Options()
7 chrome_options.add_argument(‘--headless‘)
8 chrome_options.add_argument(‘--disable-gpu‘)
9 # 驅動(dòng)路徑
10 path = r‘C:UsersBLiDesktop1801day05ziliaochromedriver.exe‘
11
12 # 創(chuàng )建瀏覽器對象
13 browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
14
15 # 上網(wǎng)
16 url = ‘http://www.baidu.com/‘
17 browser.get(url)
18 time.sleep(3)
19
20 browser.save_screenshot(‘baidu.png‘)
21
22 browser.quit()
至此,這篇關(guān)于Python網(wǎng)絡(luò )爬蟲(chóng)selenium和PhantomJS的懶加載技術(shù)的文章就講完了。如果您的問(wèn)題無(wú)法解決,請參考以下文章:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么用Python寫(xiě)爬蟲(chóng)程序:爬蟲(chóng)前奏)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-03-03 14:01
爬行動(dòng)物前奏
爬蟲(chóng)實(shí)例:
搜索引擎(百度、谷歌、360搜索等)。
伯樂(lè )在線(xiàn)。
慧慧購物助理。
數據分析與研究(數據冰山知乎欄目)。
搶票軟件等
什么是網(wǎng)絡(luò )爬蟲(chóng):
通俗理解:爬蟲(chóng)是模擬人類(lèi)請求行為的程序網(wǎng)站。它可以自動(dòng)請求網(wǎng)頁(yè),獲取數據,然后使用一定的規則來(lái)提取有價(jià)值的數據。
專(zhuān)業(yè)介紹:百度百科。
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng):
萬(wàn)能爬蟲(chóng):萬(wàn)能爬蟲(chóng)是搜索引擎爬蟲(chóng)系統(百度、谷歌、搜狗等)的重要組成部分。主要是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
Focused crawler:是一種針對特定需求的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般爬蟲(chóng)的區別在于:聚焦爬蟲(chóng)在實(shí)現網(wǎng)頁(yè)爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行過(guò)濾處理,并盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息。.
為什么要用 Python 編寫(xiě)爬蟲(chóng)程序:
PHP:PHP是世界上最好的語(yǔ)言,但他不是天生就干這個(gè)的,而且對多線(xiàn)程、異步支持、并發(fā)處理能力弱等問(wèn)題也不是很好。爬蟲(chóng)是一個(gè)工具程序,對速度和效率的要求很高。
Java:生態(tài)非常完整,是Python爬蟲(chóng)最大的競爭對手。但是Java語(yǔ)言本身很笨重,代碼量很大。重構的成本比較高,任何修改都會(huì )導致代碼的大量變化。爬蟲(chóng)經(jīng)常需要修改 采集 代碼。
C/C++:運行效率無(wú)敵。但學(xué)習和發(fā)展成本很高。寫(xiě)一個(gè)小爬蟲(chóng)可能需要半天以上的時(shí)間。
Python:語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,支持的模塊多。相關(guān)的HTTP請求模塊和HTML解析模塊非常豐富。還有 Scrapy 和 Scrapy-redis 框架,讓我們開(kāi)發(fā)爬蟲(chóng)變得非常容易。
準備工具:
Python3.6 開(kāi)發(fā)環(huán)境。
Pycharm 2017 專(zhuān)業(yè)版。
虛擬環(huán)境。虛擬環(huán)境/虛擬環(huán)境包裝器。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么用Python寫(xiě)爬蟲(chóng)程序:爬蟲(chóng)前奏)
爬行動(dòng)物前奏
爬蟲(chóng)實(shí)例:
搜索引擎(百度、谷歌、360搜索等)。
伯樂(lè )在線(xiàn)。
慧慧購物助理。
數據分析與研究(數據冰山知乎欄目)。
搶票軟件等
什么是網(wǎng)絡(luò )爬蟲(chóng):
通俗理解:爬蟲(chóng)是模擬人類(lèi)請求行為的程序網(wǎng)站。它可以自動(dòng)請求網(wǎng)頁(yè),獲取數據,然后使用一定的規則來(lái)提取有價(jià)值的數據。
專(zhuān)業(yè)介紹:百度百科。
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng):
萬(wàn)能爬蟲(chóng):萬(wàn)能爬蟲(chóng)是搜索引擎爬蟲(chóng)系統(百度、谷歌、搜狗等)的重要組成部分。主要是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
Focused crawler:是一種針對特定需求的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般爬蟲(chóng)的區別在于:聚焦爬蟲(chóng)在實(shí)現網(wǎng)頁(yè)爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行過(guò)濾處理,并盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息。.
為什么要用 Python 編寫(xiě)爬蟲(chóng)程序:
PHP:PHP是世界上最好的語(yǔ)言,但他不是天生就干這個(gè)的,而且對多線(xiàn)程、異步支持、并發(fā)處理能力弱等問(wèn)題也不是很好。爬蟲(chóng)是一個(gè)工具程序,對速度和效率的要求很高。
Java:生態(tài)非常完整,是Python爬蟲(chóng)最大的競爭對手。但是Java語(yǔ)言本身很笨重,代碼量很大。重構的成本比較高,任何修改都會(huì )導致代碼的大量變化。爬蟲(chóng)經(jīng)常需要修改 采集 代碼。
C/C++:運行效率無(wú)敵。但學(xué)習和發(fā)展成本很高。寫(xiě)一個(gè)小爬蟲(chóng)可能需要半天以上的時(shí)間。
Python:語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,支持的模塊多。相關(guān)的HTTP請求模塊和HTML解析模塊非常豐富。還有 Scrapy 和 Scrapy-redis 框架,讓我們開(kāi)發(fā)爬蟲(chóng)變得非常容易。
準備工具:
Python3.6 開(kāi)發(fā)環(huán)境。
Pycharm 2017 專(zhuān)業(yè)版。
虛擬環(huán)境。虛擬環(huán)境/虛擬環(huán)境包裝器。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Pythonampamp//amp管理員;管理員管理員(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 75 次瀏覽 ? 2022-03-03 08:04
python爬蟲(chóng)BeautifulSoup快速抓取網(wǎng)站圖片 Python / Admin 發(fā)表于 1 個(gè)月前 80
本文介紹BeautifulSoup模塊的使用方法和注意事項,幫助您快速了解和學(xué)習BeautifulSoup模塊。有興趣了解爬蟲(chóng)的朋友,快點(diǎn)學(xué)習吧。關(guān)注公眾號獲取爬蟲(chóng)教程。
第一步:了解需求
在開(kāi)始寫(xiě)作之前,我們需要知道我們將要做什么?做爬行動(dòng)物。
搶什么?抓取 網(wǎng)站 圖像。
去哪里搶?zhuān)繄D片之家
可以用這個(gè)網(wǎng)站練手,頁(yè)面比較簡(jiǎn)單。
第 2 步:分析 網(wǎng)站 因素
我們知道需要抓取哪些網(wǎng)站數據,那么我們來(lái)分析一下網(wǎng)站是如何提供數據的。
根據分析,所有頁(yè)面看起來(lái)都一樣,所以我們選擇一張照片給大家演示一下。
1、獲取列表的標題以及鏈接
進(jìn)一步研究頁(yè)面數據,每個(gè)頁(yè)面下面都有一個(gè)列表,然后通過(guò)列表的標題進(jìn)入下一層。然后在這個(gè)頁(yè)面上我們需要獲取列表標題。
2、獲取圖片列表,以及鏈接,翻頁(yè)操作
3、獲取圖片詳情,所有圖片
然后點(diǎn)擊繼續研究,發(fā)現還有更多圖片。
分析完畢,我們來(lái)寫(xiě)代碼。
流程圖如下:
第 3 步:編寫(xiě)代碼以實(shí)現需求
1、導入模塊
導入我們需要使用的所有模塊。
2、獲取列表的標題,以及鏈接
3、獲取類(lèi)別列表標題、鏈接和翻頁(yè)。
4、獲取詳細圖片并保存
知識點(diǎn)總結
學(xué)習本文,可以掌握知識點(diǎn)。
1、掌握 BeautifulSoup
區分find和find_all的用法:find,查找第一個(gè)返回字符串,find_all查找全部,返回一個(gè)列表
區分get和get_text的用法:get獲取標簽中的屬性,get_text獲取標簽包圍的文本。
2、掌握正則,re.findall的使用
3、掌握字符串切片的方式 str[0,-5] 截取第一個(gè)文本到倒數第五個(gè)文本。
4、掌握創(chuàng )建文件夾的方法os.mkdir(name)
5、掌握with open(f, w) as f的用法:
6、掌握requests模塊的get請求方法。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Pythonampamp//amp管理員;管理員管理員(組圖))
python爬蟲(chóng)BeautifulSoup快速抓取網(wǎng)站圖片 Python / Admin 發(fā)表于 1 個(gè)月前 80
本文介紹BeautifulSoup模塊的使用方法和注意事項,幫助您快速了解和學(xué)習BeautifulSoup模塊。有興趣了解爬蟲(chóng)的朋友,快點(diǎn)學(xué)習吧。關(guān)注公眾號獲取爬蟲(chóng)教程。
第一步:了解需求
在開(kāi)始寫(xiě)作之前,我們需要知道我們將要做什么?做爬行動(dòng)物。
搶什么?抓取 網(wǎng)站 圖像。
去哪里搶?zhuān)繄D片之家
可以用這個(gè)網(wǎng)站練手,頁(yè)面比較簡(jiǎn)單。
第 2 步:分析 網(wǎng)站 因素
我們知道需要抓取哪些網(wǎng)站數據,那么我們來(lái)分析一下網(wǎng)站是如何提供數據的。
根據分析,所有頁(yè)面看起來(lái)都一樣,所以我們選擇一張照片給大家演示一下。
1、獲取列表的標題以及鏈接
進(jìn)一步研究頁(yè)面數據,每個(gè)頁(yè)面下面都有一個(gè)列表,然后通過(guò)列表的標題進(jìn)入下一層。然后在這個(gè)頁(yè)面上我們需要獲取列表標題。
2、獲取圖片列表,以及鏈接,翻頁(yè)操作
3、獲取圖片詳情,所有圖片
然后點(diǎn)擊繼續研究,發(fā)現還有更多圖片。
分析完畢,我們來(lái)寫(xiě)代碼。
流程圖如下:
第 3 步:編寫(xiě)代碼以實(shí)現需求
1、導入模塊
導入我們需要使用的所有模塊。
2、獲取列表的標題,以及鏈接
3、獲取類(lèi)別列表標題、鏈接和翻頁(yè)。
4、獲取詳細圖片并保存
知識點(diǎn)總結
學(xué)習本文,可以掌握知識點(diǎn)。
1、掌握 BeautifulSoup
區分find和find_all的用法:find,查找第一個(gè)返回字符串,find_all查找全部,返回一個(gè)列表
區分get和get_text的用法:get獲取標簽中的屬性,get_text獲取標簽包圍的文本。
2、掌握正則,re.findall的使用
3、掌握字符串切片的方式 str[0,-5] 截取第一個(gè)文本到倒數第五個(gè)文本。
4、掌握創(chuàng )建文件夾的方法os.mkdir(name)
5、掌握with open(f, w) as f的用法:
6、掌握requests模塊的get請求方法。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取今日頭條圖集,老司機以街拍為例(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-03-02 15:09
今天,我們來(lái)爬取今日頭條圖集。老司機以街拍為例。
操作平臺:Windows
Python版本:Python3.6
IDE:崇高文本
其他工具:Chrome瀏覽器
1、網(wǎng)頁(yè)分析
從打開(kāi)今日頭條首頁(yè),搜索“街拍”,有“綜合”、“視頻”、“圖集”和“用戶(hù)”四個(gè)標簽,我們依次點(diǎn)擊幾個(gè)標簽,雖然頁(yè)面變了,但是address bar 的 URL 沒(méi)有變化,說(shuō)明頁(yè)面內容是動(dòng)態(tài)加載的。
按“F12”調出開(kāi)發(fā)者工具,刷新頁(yè)面,然后分析開(kāi)發(fā)者工具:
?、伲狐c(diǎn)擊網(wǎng)絡(luò )
?、冢哼x擇XHR
?、郏赫业揭浴?offset=”開(kāi)頭的項目并點(diǎn)擊,右側會(huì )出現詳細信息
?、埽狐c(diǎn)擊右側的“頁(yè)眉”標簽
?、荩翰榭凑埱蠓绞胶驼埱蟮刂?br /> ?、蓿哼@里是請求的參數
接下來(lái)點(diǎn)擊 Preview 選項卡查看返回的數據:
返回的數據格式為json,展開(kāi)“data”字段,展開(kāi)第一項,查找“title”,可以看到和網(wǎng)頁(yè)上第一個(gè)圖集的title一樣,說(shuō)明找到了正確的地方。
繼續分析,在“data”的第一項中有一個(gè)“image_detail”字段。展開(kāi)可以看到 6 個(gè)項目,每個(gè)項目都有一個(gè) url。乍一看,它是圖像 URL。我不知道這是否是我們正在尋找的。復制到瀏覽器打開(kāi)確實(shí)和第一個(gè)縮略圖一樣,那么這6張圖都是圖集的嗎?
點(diǎn)擊網(wǎng)頁(yè)的第一個(gè)圖集,可以看到確實(shí)只有6張圖片,和返回的json數據中的圖片是一致的。
分析完了嗎?我們看看頁(yè)面除了圖片,文字和相關(guān)推薦占了這么多內容,圖片有點(diǎn)小,我們在圖片上右擊選擇“在新標簽頁(yè)打開(kāi)圖片”,注意地址欄:
你發(fā)現其中的奧秘了嗎?圖片地址“l(fā)arge”變成了“origin”,分別保存兩張圖片,對比大小,origin比large大很多,這就是我們需要的,至此,網(wǎng)頁(yè)解析完成,接下來(lái)開(kāi)始編寫(xiě)代碼。
2、代碼
requests 庫用于抓取。由于前面的分析很詳細,代碼不再單獨講解。請看評論。
#-*- 編碼:utf-8 -*-
導入操作系統
重新進(jìn)口
導入json
導入請求
從 urllib.parse 導入 urlencode
def get_one_page(偏移量,關(guān)鍵字):
'''
獲取網(wǎng)頁(yè)html內容并返回
'''
段 = {
'offset': offset, # 搜索結果項從哪里開(kāi)始
'format': 'json', # 返回數據格式
'keyword': 關(guān)鍵字,#要搜索的關(guān)鍵字
'autoload': 'true', # 自動(dòng)加載
'count': 20, # 每次加載結果的項數
'cur_tab': 3, # 當前標簽頁(yè)索引,3為“Atlas”
'from': 'gallery' # 來(lái)源,“畫(huà)廊”
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko)鉻/63.0.3239.132 Safari/537.36'}
網(wǎng)址 = '#39; + urlencode(段落)
嘗試:
# 獲取網(wǎng)頁(yè)內容并以json格式返回數據
響應 = requests.get(url, headers=headers)
# 通過(guò)狀態(tài)碼判斷獲取是否成功
如果 response.status_code == 200:
返回響應.文本
返回無(wú)
除了請求異常:
返回無(wú)
def parse_one_page(html):
'''
解析出群組圖片的URL,返回網(wǎng)頁(yè)中所有圖集的標題和圖片地址
'''
網(wǎng)址 = []
數據 = json.loads(html)
如果 data.keys() 中的數據和“數據”:
對于 data.get('data') 中的項目:
page_urls = []
標題 = item.get('title')
image_detail = item.get('image_detail')
對于我在范圍內(len(image_detail)):
# 獲取大圖地址
url = image_detail[i]['url']
# 替換URL獲取原創(chuàng )高清圖片
url = url.replace('大', '原點(diǎn)')
page_urls.append(url)
urls.append({'title': 標題,'url_list': page_urls})
返回網(wǎng)址
def save_image_file(url, 路徑):
'''
保存圖像文件
'''
ir = requests.get(url)
如果 ir.status_code == 200:
使用 open(path, 'wb') 作為 f:
f.write(ir.content)
f.close()
def main(偏移量,字):
html = get_one_page(偏移量,字)
網(wǎng)址 = parse_one_page(html)
# 如果圖片文件夾不存在則創(chuàng )建
root_path = 單詞
如果不是 os.path.exists(root_path):
os.mkdir(root_path)
對于我在范圍內(len(urls)):
print('---正在下載 %s'%urls[i]['title'])
文件夾 = root_path + '/' + urls[i]['title']
如果不是 os.path.exists(文件夾):
嘗試:
os.mkdir(文件夾)
NotADirectoryError 除外:
繼續
除了 OSError:
繼續
url_list = urls[i]['url_list']
對于范圍內的 j(len(url_list)):
路徑 = 文件夾 + '/index_' + str("d"%j) + '.jpg'
如果不是 os.path.exists(path):
save_image_file(urls[i]['url_list'][j], 路徑)
如果 __name__ == '__main__':
# 抓2000個(gè)圖集,基本上包括所有圖集
對于我在范圍內(100):
main(i*20, '街拍')
您可以根據自己的喜好替換關(guān)鍵詞來(lái)下載您喜歡的圖集。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取今日頭條圖集,老司機以街拍為例(組圖))
今天,我們來(lái)爬取今日頭條圖集。老司機以街拍為例。
操作平臺:Windows
Python版本:Python3.6
IDE:崇高文本
其他工具:Chrome瀏覽器
1、網(wǎng)頁(yè)分析
從打開(kāi)今日頭條首頁(yè),搜索“街拍”,有“綜合”、“視頻”、“圖集”和“用戶(hù)”四個(gè)標簽,我們依次點(diǎn)擊幾個(gè)標簽,雖然頁(yè)面變了,但是address bar 的 URL 沒(méi)有變化,說(shuō)明頁(yè)面內容是動(dòng)態(tài)加載的。
按“F12”調出開(kāi)發(fā)者工具,刷新頁(yè)面,然后分析開(kāi)發(fā)者工具:
?、伲狐c(diǎn)擊網(wǎng)絡(luò )
?、冢哼x擇XHR
?、郏赫业揭浴?offset=”開(kāi)頭的項目并點(diǎn)擊,右側會(huì )出現詳細信息
?、埽狐c(diǎn)擊右側的“頁(yè)眉”標簽
?、荩翰榭凑埱蠓绞胶驼埱蟮刂?br /> ?、蓿哼@里是請求的參數
接下來(lái)點(diǎn)擊 Preview 選項卡查看返回的數據:
返回的數據格式為json,展開(kāi)“data”字段,展開(kāi)第一項,查找“title”,可以看到和網(wǎng)頁(yè)上第一個(gè)圖集的title一樣,說(shuō)明找到了正確的地方。
繼續分析,在“data”的第一項中有一個(gè)“image_detail”字段。展開(kāi)可以看到 6 個(gè)項目,每個(gè)項目都有一個(gè) url。乍一看,它是圖像 URL。我不知道這是否是我們正在尋找的。復制到瀏覽器打開(kāi)確實(shí)和第一個(gè)縮略圖一樣,那么這6張圖都是圖集的嗎?
點(diǎn)擊網(wǎng)頁(yè)的第一個(gè)圖集,可以看到確實(shí)只有6張圖片,和返回的json數據中的圖片是一致的。
分析完了嗎?我們看看頁(yè)面除了圖片,文字和相關(guān)推薦占了這么多內容,圖片有點(diǎn)小,我們在圖片上右擊選擇“在新標簽頁(yè)打開(kāi)圖片”,注意地址欄:
你發(fā)現其中的奧秘了嗎?圖片地址“l(fā)arge”變成了“origin”,分別保存兩張圖片,對比大小,origin比large大很多,這就是我們需要的,至此,網(wǎng)頁(yè)解析完成,接下來(lái)開(kāi)始編寫(xiě)代碼。
2、代碼
requests 庫用于抓取。由于前面的分析很詳細,代碼不再單獨講解。請看評論。
#-*- 編碼:utf-8 -*-
導入操作系統
重新進(jìn)口
導入json
導入請求
從 urllib.parse 導入 urlencode
def get_one_page(偏移量,關(guān)鍵字):
'''
獲取網(wǎng)頁(yè)html內容并返回
'''
段 = {
'offset': offset, # 搜索結果項從哪里開(kāi)始
'format': 'json', # 返回數據格式
'keyword': 關(guān)鍵字,#要搜索的關(guān)鍵字
'autoload': 'true', # 自動(dòng)加載
'count': 20, # 每次加載結果的項數
'cur_tab': 3, # 當前標簽頁(yè)索引,3為“Atlas”
'from': 'gallery' # 來(lái)源,“畫(huà)廊”
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko)鉻/63.0.3239.132 Safari/537.36'}
網(wǎng)址 = '#39; + urlencode(段落)
嘗試:
# 獲取網(wǎng)頁(yè)內容并以json格式返回數據
響應 = requests.get(url, headers=headers)
# 通過(guò)狀態(tài)碼判斷獲取是否成功
如果 response.status_code == 200:
返回響應.文本
返回無(wú)
除了請求異常:
返回無(wú)
def parse_one_page(html):
'''
解析出群組圖片的URL,返回網(wǎng)頁(yè)中所有圖集的標題和圖片地址
'''
網(wǎng)址 = []
數據 = json.loads(html)
如果 data.keys() 中的數據和“數據”:
對于 data.get('data') 中的項目:
page_urls = []
標題 = item.get('title')
image_detail = item.get('image_detail')
對于我在范圍內(len(image_detail)):
# 獲取大圖地址
url = image_detail[i]['url']
# 替換URL獲取原創(chuàng )高清圖片
url = url.replace('大', '原點(diǎn)')
page_urls.append(url)
urls.append({'title': 標題,'url_list': page_urls})
返回網(wǎng)址
def save_image_file(url, 路徑):
'''
保存圖像文件
'''
ir = requests.get(url)
如果 ir.status_code == 200:
使用 open(path, 'wb') 作為 f:
f.write(ir.content)
f.close()
def main(偏移量,字):
html = get_one_page(偏移量,字)
網(wǎng)址 = parse_one_page(html)
# 如果圖片文件夾不存在則創(chuàng )建
root_path = 單詞
如果不是 os.path.exists(root_path):
os.mkdir(root_path)
對于我在范圍內(len(urls)):
print('---正在下載 %s'%urls[i]['title'])
文件夾 = root_path + '/' + urls[i]['title']
如果不是 os.path.exists(文件夾):
嘗試:
os.mkdir(文件夾)
NotADirectoryError 除外:
繼續
除了 OSError:
繼續
url_list = urls[i]['url_list']
對于范圍內的 j(len(url_list)):
路徑 = 文件夾 + '/index_' + str("d"%j) + '.jpg'
如果不是 os.path.exists(path):
save_image_file(urls[i]['url_list'][j], 路徑)
如果 __name__ == '__main__':
# 抓2000個(gè)圖集,基本上包括所有圖集
對于我在范圍內(100):
main(i*20, '街拍')
您可以根據自己的喜好替換關(guān)鍵詞來(lái)下載您喜歡的圖集。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度資源平臺官方直播一節公開(kāi)課工作原理及解決辦法(一))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-03-01 20:04
大家好,今天百度資源平臺正式開(kāi)課了,主要給大家講一個(gè)網(wǎng)站抓取和收錄的原理,這里我為大家做了詳細的筆記(一個(gè)字不漏),看完后它,可以說(shuō)做收錄基本上問(wèn)題不大。
百度爬蟲(chóng)的工作原理
首先,百度的爬蟲(chóng)會(huì )與網(wǎng)站的首頁(yè)進(jìn)行交互。拿到網(wǎng)站的首頁(yè)后,會(huì )理解頁(yè)面,理解它的收錄(類(lèi)型,值計算),其次,會(huì )把網(wǎng)站的所有超鏈接都提取到首頁(yè)。如下圖所示,首頁(yè)上的超鏈接稱(chēng)為“反向鏈接”。當下一輪爬取發(fā)生時(shí),爬蟲(chóng)會(huì )繼續與這些超鏈接頁(yè)面交互,獲取頁(yè)面進(jìn)行細化,一層一層的繼續爬取。一層抓取,構成抓取環(huán)。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
爬取友好度優(yōu)化
1、網(wǎng)址規范:
任何資源都是通過(guò) URL 抓取的。URL是相對于網(wǎng)站的門(mén)牌號的,所以URL的規劃很重要。尤其如上圖所示,在“待爬取URL”的環(huán)境下,爬蟲(chóng)在首頁(yè)時(shí),并不知道URL長(cháng)什么樣。
優(yōu)秀的網(wǎng)址的特點(diǎn)是主流、簡(jiǎn)潔,可以不做一些非主流的風(fēng)格,讓人看起來(lái)很直觀(guān)的網(wǎng)址。
好的 URL 示例:
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖,第一個(gè)鏈接是百度知道的鏈接。整個(gè)鏈接分為三個(gè)部分。第一段是網(wǎng)站的站點(diǎn),第二段是資源類(lèi)型,第三段是資源的ID。這是一個(gè)非常簡(jiǎn)單且具有爬蟲(chóng)外觀(guān)的高質(zhì)量 URL。
如上圖所示,第三段比百度知道的多一段。首先第一段是網(wǎng)站的站點(diǎn),第二段是站點(diǎn)的一級目錄,第三段是站點(diǎn)的二級目錄,最后一個(gè)段是內容ID網(wǎng)站。像這樣的 URL 也符合標準。
不友好的 URL 示例:
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這種鏈接乍一看很長(cháng)很復雜。有經(jīng)驗的站長(cháng)可以看到,這種網(wǎng)址收錄字符,而這個(gè)網(wǎng)址中收錄文章的標題,導致網(wǎng)址過(guò)長(cháng)。, 與簡(jiǎn)單 URL 相比,長(cháng) URL 并不占優(yōu)勢。百度站長(cháng)平臺規則明確規定網(wǎng)址不能超過(guò)256字節。個(gè)人建議URL長(cháng)度控制在100字節100字符以?xún)?。足夠的資源來(lái)顯示 URL。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,該網(wǎng)址收錄統計參數,可能導致重復爬取,浪費站點(diǎn)權限。因此,不能使用參數。如果必須使用參數,也可以保留必要的參數。參數字符可以使用常規的連接符,如“?”、“&”,避免使用非主流的連接符。
2、合理發(fā)現鏈接:
爬蟲(chóng)從首頁(yè)開(kāi)始逐層爬取,所以需要做好首頁(yè)與資源頁(yè)的URL關(guān)系。這樣,爬行相對來(lái)說(shuō)比較省力。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,從首頁(yè)到具體內容的超鏈接路徑關(guān)系稱(chēng)為發(fā)現鏈接。目前大多數移動(dòng)臺都不太關(guān)注發(fā)現鏈接的關(guān)系,因此爬蟲(chóng)無(wú)法爬取內容頁(yè)面。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這兩個(gè)站點(diǎn)是移動(dòng)網(wǎng)站常用的建站方式。從鏈接發(fā)現的角度來(lái)看,這兩類(lèi)網(wǎng)站并不友好。
Feed流推薦:大部分做Feed流的網(wǎng)站后臺數據很多,用戶(hù)會(huì )不斷刷新新的內容,但是無(wú)論你刷新多少次,可能也只能刷新1%左右內容。爬蟲(chóng)相當于一個(gè)用戶(hù)。爬蟲(chóng)不可能以這種方式爬取網(wǎng)站的所有內容,所以有些頁(yè)面不會(huì )被爬取。就算你有100萬(wàn)的內容,也可能只能搶到1-200萬(wàn)。
只有搜索條目:如上圖所示,首頁(yè)只有一個(gè)搜索框。用戶(hù)需要輸入關(guān)鍵詞才能找到對應的內容,但是爬蟲(chóng)是不可能輸入關(guān)鍵詞再爬的,所以爬蟲(chóng)之后只能爬到首頁(yè),沒(méi)有回鏈,自然爬行和 收錄 不會(huì )是理想的。
解決方法:索引頁(yè)下的內容按發(fā)布時(shí)間倒序排列。這樣做的好處是搜索引擎可以通過(guò)索引頁(yè)面抓取你的網(wǎng)站最新資源。另外,新發(fā)布的資源要實(shí)時(shí)發(fā)布。索引頁(yè)已同步。很多純靜態(tài)的網(wǎng)頁(yè)都更新了內容,但是首頁(yè)(索引頁(yè))還沒(méi)有出來(lái)。這將導致搜索引擎無(wú)法通過(guò)索引頁(yè)面抓取最新的資源。第三點(diǎn)是后鏈(最新文章的URL)需要直接暴露在源碼中,方便搜索引擎抓取。最后,索引頁(yè)越多越好,幾個(gè)優(yōu)質(zhì)的索引頁(yè)就夠了,比如長(cháng)城,基本上只用首頁(yè)作為索引頁(yè)。
最后,這里有一個(gè)更高效的解決方案,就是直接通過(guò)百度站長(cháng)資源平臺主動(dòng)提交資源,讓搜索引擎繞過(guò)索引頁(yè),直接抓取最新資源。這里有兩點(diǎn)需要注意。
Q:是不是提交的資源越多越好?
A:收錄效果的核心永遠是內容的質(zhì)量。如果大量提交低質(zhì)量、超標的資源,就會(huì )造成懲罰性打擊。
問(wèn):為什么我提交了一個(gè)普通的 收錄 卻沒(méi)有被抓到?
A:資源提交只能加速資源發(fā)現,不能保證短時(shí)間內爬取。當然,百度表示,算法不斷優(yōu)化,讓優(yōu)質(zhì)內容被更快抓取。
3、訪(fǎng)問(wèn)友好性:
爬蟲(chóng)需要和網(wǎng)站交互,保證網(wǎng)站的穩定性,爬蟲(chóng)才能正常爬取。那么訪(fǎng)問(wèn)友好性主要包括以下幾個(gè)方面。
訪(fǎng)問(wèn)速度優(yōu)化:建議將加載時(shí)間控制在2S以?xún)?,這樣無(wú)論是用戶(hù)還是爬蟲(chóng)都會(huì )更喜歡打開(kāi)速度更快的網(wǎng)站,二是避免不必要的跳轉,雖然這是很少見(jiàn)的部分,但是有還是網(wǎng)站多級跳轉,所以對于爬蟲(chóng)來(lái)說(shuō),多級跳轉的同時(shí)斷線(xiàn)的可能性很大。常見(jiàn)的做法是先不帶www的域名跳轉到帶WWW的域名,再用帶WWW的域名跳轉到https,最后換一個(gè)新站點(diǎn)。在這種情況下,有三個(gè)或四個(gè)級別的跳躍。如果有類(lèi)似網(wǎng)站的修改,建議直接跳轉到新域名。
標準http返回碼:我們常見(jiàn)的301/302的正確使用,以及404的正確使用,主要是常規問(wèn)題,用常規方法解決,比如遇到無(wú)效資源,那就用404來(lái)做,不要t 使用一些特殊的返回狀態(tài)碼。
訪(fǎng)問(wèn)穩定性?xún)?yōu)化:一是盡量選擇國內規模較大的DNS服務(wù),保證網(wǎng)站的穩定性。對于域名的DNS來(lái)說(shuō),阿里云其實(shí)是比較穩定可靠的,那么二是謹慎使用技術(shù)手段,阻止爬取。如果有特定資源不想在百度上展示,可以使用機器人屏蔽。比如網(wǎng)站的后臺鏈接大多被機器人屏蔽。如果爬取頻率過(guò)高,導致服務(wù)器壓力過(guò)大,影響用戶(hù)正常訪(fǎng)問(wèn),可以通過(guò)資源平臺的工具降低爬取頻率。二是防止防火墻誤攔截爬蟲(chóng)爬取,所以建議可以將搜索引擎的UA加入白名單。最后一點(diǎn)是服務(wù)器的穩定性,尤其是在短時(shí)間內提交大量?jì)?yōu)質(zhì)資源的情況下。這時(shí)候一定要注意服務(wù)器的穩定性,因為當你提交大量資源時(shí),爬蟲(chóng)的數量會(huì )相應增加。這次會(huì )導致您的服務(wù)器出現故障嗎?打開(kāi)壓力太大,這個(gè)問(wèn)題需要站長(cháng)注意。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這三個(gè)例子是第三方防火墻攔截的一種狀態(tài)。普通用戶(hù)打開(kāi)這個(gè)狀態(tài),搜索引擎爬取的時(shí)候也是這個(gè)狀態(tài),所以如果遇到CC或者DDOS,我們在打開(kāi)防火墻之前,必須先釋放搜索引擎的UA。
4、識別百度爬蟲(chóng)
對于一些網(wǎng)站,可能有針對用戶(hù)的特殊優(yōu)化,可能有網(wǎng)站想區分用戶(hù)和爬蟲(chóng)進(jìn)行優(yōu)化,所以這時(shí)候就需要識別百度爬蟲(chóng)了。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
首先,通過(guò)一個(gè)簡(jiǎn)單的方法,我們可以通過(guò)百度的UA來(lái)識別百度爬蟲(chóng)。目前百度PC、手機、小程序是三種不同的UA。然后,通過(guò)簡(jiǎn)單的識別方法,就有了第三方UA。爬蟲(chóng)模擬百度爬蟲(chóng),所以你認不出來(lái)。那么這時(shí)候我們就可以通過(guò)雙向DNS解析認證來(lái)區分了。詳情請參考《簡(jiǎn)單兩步:教你快速識別百度蜘蛛》。
提問(wèn)時(shí)間
問(wèn):新網(wǎng)站會(huì )有抓取限制嗎?
A:對于任何新站點(diǎn),都沒(méi)有抓取限制,但是從去年開(kāi)始,我們就開(kāi)始提供對新站點(diǎn)的支持,讓你的網(wǎng)站,首先是收錄上百度。然后做一個(gè)價(jià)值判斷,那么如何讓百度知道你是新站點(diǎn),有兩個(gè)捷徑,一是去百度資源平臺提交,二是去工信部ICP備案,我們可以從工信部得到,從ICP備案的數據,備案后,我們知道有人建了一個(gè)新站點(diǎn),這樣我們就可以為新站點(diǎn)提供基礎的流量支持。
Q:蜘蛛抓取的配額會(huì )針對每個(gè)站點(diǎn)進(jìn)行調整。多久會(huì )調整一次?
A:確實(shí)會(huì )有調整。對于新資源,會(huì )與你的抓取頻率有關(guān),而對于舊資源,會(huì )與你的內容質(zhì)量有關(guān)。如果新資源的質(zhì)量發(fā)生變化,那么爬取頻率也會(huì )發(fā)生變化。網(wǎng)站@如果>的規模發(fā)生變化,爬取的頻率也會(huì )發(fā)生變化。如果有大改版,那么爬取的頻率也會(huì )相對變化。
Q:網(wǎng)站降級可以恢復嗎?
A:網(wǎng)站降級恢復的前提是,我們會(huì )重新評估網(wǎng)站,檢查網(wǎng)站是否已整改,如果有整改,是否404已制作并提交給資源 如果平臺完全符合要求,搜索引擎將在評估后恢復不違反規則的網(wǎng)站。
問(wèn):新網(wǎng)站是否有評估期?
A:對我們來(lái)說(shuō),沒(méi)有評估期這回事。正如我們前面提到的,它可能支持一個(gè)新站點(diǎn)的流量。假設一個(gè)新站點(diǎn)經(jīng)過(guò)1-2個(gè)月的流量支持,發(fā)現網(wǎng)站繼續保持這個(gè)狀態(tài),那么不會(huì )有大的調整。當我們發(fā)現網(wǎng)站的質(zhì)量有明顯提升時(shí),我們也會(huì )相應的提升百度排名。
Q:百度對待國外服務(wù)器和國內服務(wù)器有區別嗎?
A:從戰略上看,沒(méi)有嚴格的區分。不過(guò)很多國外服務(wù)器在中國部分地區封殺了,從國外服務(wù)器網(wǎng)站備案來(lái)看,國內服務(wù)器有優(yōu)勢。
Q:新站點(diǎn)的舊域名是不是更有優(yōu)勢?
A:如果說(shuō)舊域名和新網(wǎng)站是同一個(gè)內容,在初期確實(shí)有一定的優(yōu)勢,但也只是初期,內容的好壞還要看后期. 需要特別注意的是,如果老域名行業(yè)和你的新網(wǎng)站的內容無(wú)關(guān),即使是所謂的高權限老域名也會(huì )適得其反。百度會(huì )覺(jué)得,今天做那個(gè)明天做,效果還不如新建一個(gè)域名。
Q:蜘蛛有重量嗎,比如220、116等高重量蜘蛛?
答:蜘蛛沒(méi)有重量。網(wǎng)站 的排名主要取決于 網(wǎng)站 的質(zhì)量。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度資源平臺官方直播一節公開(kāi)課工作原理及解決辦法(一))
大家好,今天百度資源平臺正式開(kāi)課了,主要給大家講一個(gè)網(wǎng)站抓取和收錄的原理,這里我為大家做了詳細的筆記(一個(gè)字不漏),看完后它,可以說(shuō)做收錄基本上問(wèn)題不大。
百度爬蟲(chóng)的工作原理
首先,百度的爬蟲(chóng)會(huì )與網(wǎng)站的首頁(yè)進(jìn)行交互。拿到網(wǎng)站的首頁(yè)后,會(huì )理解頁(yè)面,理解它的收錄(類(lèi)型,值計算),其次,會(huì )把網(wǎng)站的所有超鏈接都提取到首頁(yè)。如下圖所示,首頁(yè)上的超鏈接稱(chēng)為“反向鏈接”。當下一輪爬取發(fā)生時(shí),爬蟲(chóng)會(huì )繼續與這些超鏈接頁(yè)面交互,獲取頁(yè)面進(jìn)行細化,一層一層的繼續爬取。一層抓取,構成抓取環(huán)。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
爬取友好度優(yōu)化
1、網(wǎng)址規范:
任何資源都是通過(guò) URL 抓取的。URL是相對于網(wǎng)站的門(mén)牌號的,所以URL的規劃很重要。尤其如上圖所示,在“待爬取URL”的環(huán)境下,爬蟲(chóng)在首頁(yè)時(shí),并不知道URL長(cháng)什么樣。
優(yōu)秀的網(wǎng)址的特點(diǎn)是主流、簡(jiǎn)潔,可以不做一些非主流的風(fēng)格,讓人看起來(lái)很直觀(guān)的網(wǎng)址。
好的 URL 示例:

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖,第一個(gè)鏈接是百度知道的鏈接。整個(gè)鏈接分為三個(gè)部分。第一段是網(wǎng)站的站點(diǎn),第二段是資源類(lèi)型,第三段是資源的ID。這是一個(gè)非常簡(jiǎn)單且具有爬蟲(chóng)外觀(guān)的高質(zhì)量 URL。
如上圖所示,第三段比百度知道的多一段。首先第一段是網(wǎng)站的站點(diǎn),第二段是站點(diǎn)的一級目錄,第三段是站點(diǎn)的二級目錄,最后一個(gè)段是內容ID網(wǎng)站。像這樣的 URL 也符合標準。
不友好的 URL 示例:

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這種鏈接乍一看很長(cháng)很復雜。有經(jīng)驗的站長(cháng)可以看到,這種網(wǎng)址收錄字符,而這個(gè)網(wǎng)址中收錄文章的標題,導致網(wǎng)址過(guò)長(cháng)。, 與簡(jiǎn)單 URL 相比,長(cháng) URL 并不占優(yōu)勢。百度站長(cháng)平臺規則明確規定網(wǎng)址不能超過(guò)256字節。個(gè)人建議URL長(cháng)度控制在100字節100字符以?xún)?。足夠的資源來(lái)顯示 URL。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,該網(wǎng)址收錄統計參數,可能導致重復爬取,浪費站點(diǎn)權限。因此,不能使用參數。如果必須使用參數,也可以保留必要的參數。參數字符可以使用常規的連接符,如“?”、“&”,避免使用非主流的連接符。
2、合理發(fā)現鏈接:
爬蟲(chóng)從首頁(yè)開(kāi)始逐層爬取,所以需要做好首頁(yè)與資源頁(yè)的URL關(guān)系。這樣,爬行相對來(lái)說(shuō)比較省力。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,從首頁(yè)到具體內容的超鏈接路徑關(guān)系稱(chēng)為發(fā)現鏈接。目前大多數移動(dòng)臺都不太關(guān)注發(fā)現鏈接的關(guān)系,因此爬蟲(chóng)無(wú)法爬取內容頁(yè)面。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這兩個(gè)站點(diǎn)是移動(dòng)網(wǎng)站常用的建站方式。從鏈接發(fā)現的角度來(lái)看,這兩類(lèi)網(wǎng)站并不友好。
Feed流推薦:大部分做Feed流的網(wǎng)站后臺數據很多,用戶(hù)會(huì )不斷刷新新的內容,但是無(wú)論你刷新多少次,可能也只能刷新1%左右內容。爬蟲(chóng)相當于一個(gè)用戶(hù)。爬蟲(chóng)不可能以這種方式爬取網(wǎng)站的所有內容,所以有些頁(yè)面不會(huì )被爬取。就算你有100萬(wàn)的內容,也可能只能搶到1-200萬(wàn)。
只有搜索條目:如上圖所示,首頁(yè)只有一個(gè)搜索框。用戶(hù)需要輸入關(guān)鍵詞才能找到對應的內容,但是爬蟲(chóng)是不可能輸入關(guān)鍵詞再爬的,所以爬蟲(chóng)之后只能爬到首頁(yè),沒(méi)有回鏈,自然爬行和 收錄 不會(huì )是理想的。
解決方法:索引頁(yè)下的內容按發(fā)布時(shí)間倒序排列。這樣做的好處是搜索引擎可以通過(guò)索引頁(yè)面抓取你的網(wǎng)站最新資源。另外,新發(fā)布的資源要實(shí)時(shí)發(fā)布。索引頁(yè)已同步。很多純靜態(tài)的網(wǎng)頁(yè)都更新了內容,但是首頁(yè)(索引頁(yè))還沒(méi)有出來(lái)。這將導致搜索引擎無(wú)法通過(guò)索引頁(yè)面抓取最新的資源。第三點(diǎn)是后鏈(最新文章的URL)需要直接暴露在源碼中,方便搜索引擎抓取。最后,索引頁(yè)越多越好,幾個(gè)優(yōu)質(zhì)的索引頁(yè)就夠了,比如長(cháng)城,基本上只用首頁(yè)作為索引頁(yè)。
最后,這里有一個(gè)更高效的解決方案,就是直接通過(guò)百度站長(cháng)資源平臺主動(dòng)提交資源,讓搜索引擎繞過(guò)索引頁(yè),直接抓取最新資源。這里有兩點(diǎn)需要注意。
Q:是不是提交的資源越多越好?
A:收錄效果的核心永遠是內容的質(zhì)量。如果大量提交低質(zhì)量、超標的資源,就會(huì )造成懲罰性打擊。
問(wèn):為什么我提交了一個(gè)普通的 收錄 卻沒(méi)有被抓到?
A:資源提交只能加速資源發(fā)現,不能保證短時(shí)間內爬取。當然,百度表示,算法不斷優(yōu)化,讓優(yōu)質(zhì)內容被更快抓取。
3、訪(fǎng)問(wèn)友好性:
爬蟲(chóng)需要和網(wǎng)站交互,保證網(wǎng)站的穩定性,爬蟲(chóng)才能正常爬取。那么訪(fǎng)問(wèn)友好性主要包括以下幾個(gè)方面。
訪(fǎng)問(wèn)速度優(yōu)化:建議將加載時(shí)間控制在2S以?xún)?,這樣無(wú)論是用戶(hù)還是爬蟲(chóng)都會(huì )更喜歡打開(kāi)速度更快的網(wǎng)站,二是避免不必要的跳轉,雖然這是很少見(jiàn)的部分,但是有還是網(wǎng)站多級跳轉,所以對于爬蟲(chóng)來(lái)說(shuō),多級跳轉的同時(shí)斷線(xiàn)的可能性很大。常見(jiàn)的做法是先不帶www的域名跳轉到帶WWW的域名,再用帶WWW的域名跳轉到https,最后換一個(gè)新站點(diǎn)。在這種情況下,有三個(gè)或四個(gè)級別的跳躍。如果有類(lèi)似網(wǎng)站的修改,建議直接跳轉到新域名。
標準http返回碼:我們常見(jiàn)的301/302的正確使用,以及404的正確使用,主要是常規問(wèn)題,用常規方法解決,比如遇到無(wú)效資源,那就用404來(lái)做,不要t 使用一些特殊的返回狀態(tài)碼。
訪(fǎng)問(wèn)穩定性?xún)?yōu)化:一是盡量選擇國內規模較大的DNS服務(wù),保證網(wǎng)站的穩定性。對于域名的DNS來(lái)說(shuō),阿里云其實(shí)是比較穩定可靠的,那么二是謹慎使用技術(shù)手段,阻止爬取。如果有特定資源不想在百度上展示,可以使用機器人屏蔽。比如網(wǎng)站的后臺鏈接大多被機器人屏蔽。如果爬取頻率過(guò)高,導致服務(wù)器壓力過(guò)大,影響用戶(hù)正常訪(fǎng)問(wèn),可以通過(guò)資源平臺的工具降低爬取頻率。二是防止防火墻誤攔截爬蟲(chóng)爬取,所以建議可以將搜索引擎的UA加入白名單。最后一點(diǎn)是服務(wù)器的穩定性,尤其是在短時(shí)間內提交大量?jì)?yōu)質(zhì)資源的情況下。這時(shí)候一定要注意服務(wù)器的穩定性,因為當你提交大量資源時(shí),爬蟲(chóng)的數量會(huì )相應增加。這次會(huì )導致您的服務(wù)器出現故障嗎?打開(kāi)壓力太大,這個(gè)問(wèn)題需要站長(cháng)注意。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這三個(gè)例子是第三方防火墻攔截的一種狀態(tài)。普通用戶(hù)打開(kāi)這個(gè)狀態(tài),搜索引擎爬取的時(shí)候也是這個(gè)狀態(tài),所以如果遇到CC或者DDOS,我們在打開(kāi)防火墻之前,必須先釋放搜索引擎的UA。
4、識別百度爬蟲(chóng)
對于一些網(wǎng)站,可能有針對用戶(hù)的特殊優(yōu)化,可能有網(wǎng)站想區分用戶(hù)和爬蟲(chóng)進(jìn)行優(yōu)化,所以這時(shí)候就需要識別百度爬蟲(chóng)了。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
首先,通過(guò)一個(gè)簡(jiǎn)單的方法,我們可以通過(guò)百度的UA來(lái)識別百度爬蟲(chóng)。目前百度PC、手機、小程序是三種不同的UA。然后,通過(guò)簡(jiǎn)單的識別方法,就有了第三方UA。爬蟲(chóng)模擬百度爬蟲(chóng),所以你認不出來(lái)。那么這時(shí)候我們就可以通過(guò)雙向DNS解析認證來(lái)區分了。詳情請參考《簡(jiǎn)單兩步:教你快速識別百度蜘蛛》。
提問(wèn)時(shí)間
問(wèn):新網(wǎng)站會(huì )有抓取限制嗎?
A:對于任何新站點(diǎn),都沒(méi)有抓取限制,但是從去年開(kāi)始,我們就開(kāi)始提供對新站點(diǎn)的支持,讓你的網(wǎng)站,首先是收錄上百度。然后做一個(gè)價(jià)值判斷,那么如何讓百度知道你是新站點(diǎn),有兩個(gè)捷徑,一是去百度資源平臺提交,二是去工信部ICP備案,我們可以從工信部得到,從ICP備案的數據,備案后,我們知道有人建了一個(gè)新站點(diǎn),這樣我們就可以為新站點(diǎn)提供基礎的流量支持。
Q:蜘蛛抓取的配額會(huì )針對每個(gè)站點(diǎn)進(jìn)行調整。多久會(huì )調整一次?
A:確實(shí)會(huì )有調整。對于新資源,會(huì )與你的抓取頻率有關(guān),而對于舊資源,會(huì )與你的內容質(zhì)量有關(guān)。如果新資源的質(zhì)量發(fā)生變化,那么爬取頻率也會(huì )發(fā)生變化。網(wǎng)站@如果>的規模發(fā)生變化,爬取的頻率也會(huì )發(fā)生變化。如果有大改版,那么爬取的頻率也會(huì )相對變化。
Q:網(wǎng)站降級可以恢復嗎?
A:網(wǎng)站降級恢復的前提是,我們會(huì )重新評估網(wǎng)站,檢查網(wǎng)站是否已整改,如果有整改,是否404已制作并提交給資源 如果平臺完全符合要求,搜索引擎將在評估后恢復不違反規則的網(wǎng)站。
問(wèn):新網(wǎng)站是否有評估期?
A:對我們來(lái)說(shuō),沒(méi)有評估期這回事。正如我們前面提到的,它可能支持一個(gè)新站點(diǎn)的流量。假設一個(gè)新站點(diǎn)經(jīng)過(guò)1-2個(gè)月的流量支持,發(fā)現網(wǎng)站繼續保持這個(gè)狀態(tài),那么不會(huì )有大的調整。當我們發(fā)現網(wǎng)站的質(zhì)量有明顯提升時(shí),我們也會(huì )相應的提升百度排名。
Q:百度對待國外服務(wù)器和國內服務(wù)器有區別嗎?
A:從戰略上看,沒(méi)有嚴格的區分。不過(guò)很多國外服務(wù)器在中國部分地區封殺了,從國外服務(wù)器網(wǎng)站備案來(lái)看,國內服務(wù)器有優(yōu)勢。
Q:新站點(diǎn)的舊域名是不是更有優(yōu)勢?
A:如果說(shuō)舊域名和新網(wǎng)站是同一個(gè)內容,在初期確實(shí)有一定的優(yōu)勢,但也只是初期,內容的好壞還要看后期. 需要特別注意的是,如果老域名行業(yè)和你的新網(wǎng)站的內容無(wú)關(guān),即使是所謂的高權限老域名也會(huì )適得其反。百度會(huì )覺(jué)得,今天做那個(gè)明天做,效果還不如新建一個(gè)域名。
Q:蜘蛛有重量嗎,比如220、116等高重量蜘蛛?
答:蜘蛛沒(méi)有重量。網(wǎng)站 的排名主要取決于 網(wǎng)站 的質(zhì)量。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(項目招商找A5快速獲取精準代理名單說(shuō)到SEO)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-03-01 13:16
項目投資找A5快速獲取精準代理商名單
說(shuō)到SEO,沒(méi)有人不熟悉。SEO中文翻譯為Search Engine Optimization,是指通過(guò)優(yōu)化網(wǎng)站來(lái)提高網(wǎng)站的關(guān)鍵詞排名,從而增加公司產(chǎn)品的曝光率。
在這個(gè)互聯(lián)網(wǎng)時(shí)代,很多人在購買(mǎi)新品之前都會(huì )上網(wǎng)查詢(xún)信息,看看哪些品牌的口碑和評價(jià)更好。這個(gè)時(shí)候,排名靠前的產(chǎn)品將占據絕對優(yōu)勢。據調查,87%的網(wǎng)民會(huì )使用搜索引擎服務(wù)尋找自己需要的信息,近70%的搜索者會(huì )直接在搜索結果自然排名的首頁(yè)找到自己需要的信息。
可見(jiàn),目前,SEO對于企業(yè)和產(chǎn)品有著(zhù)不可替代的意義。
關(guān)鍵詞 是重中之重
我們經(jīng)常聽(tīng)到人們談?wù)撽P(guān)鍵詞,但關(guān)鍵詞的具體用途是什么?關(guān)鍵詞是SEO的核心,也是網(wǎng)站在搜索引擎中排名的重要因素。
確定幾個(gè)關(guān)鍵詞對網(wǎng)站流量的提升會(huì )有很大的好處,但必須與網(wǎng)站和產(chǎn)品高度相關(guān)。同時(shí),您可以分析競爭對手的關(guān)鍵詞,從而了解自己和他人。當然,必須有一個(gè)核心關(guān)鍵詞,如果你做的是網(wǎng)站服務(wù),那么你的核心關(guān)鍵詞可以是:網(wǎng)站SEO,網(wǎng)站優(yōu)化;如果是其他產(chǎn)品,可以根據自己的產(chǎn)品或服務(wù)范圍進(jìn)行定位,比如:減肥、保濕、汽車(chē)保養等……
那么長(cháng)尾 關(guān)鍵詞 是什么?顧名思義,它實(shí)際上是一個(gè)比較長(cháng)的關(guān)鍵詞。長(cháng)尾關(guān)鍵詞的搜索量比較小,在企業(yè)文章、軟文中可以適當出現。
需要注意的是,關(guān)鍵詞的密度不能出現太多,但也不能太小。一般3%~6%比較合適。同樣,文章關(guān)鍵詞的文章最好不要出現太多,最好在3~5左右。
外部鏈接也會(huì )影響權重
入鏈也是網(wǎng)站優(yōu)化的一個(gè)很重要的過(guò)程,可以間接影響網(wǎng)站在搜索引擎中的權重。目前常用的鏈接分為:錨文本鏈接、超鏈接、純文本鏈接和圖片鏈接。
我們經(jīng)??吹胶芏嗑W(wǎng)站的地方都會(huì )有友情鏈接,但是隨著(zhù)百度算法的調整,友情鏈接的作用已經(jīng)很小了。目前通過(guò)軟文和圖片傳播鏈接的方法是最科學(xué)的方法,尤其是通過(guò)高質(zhì)量的軟文允許他人轉載傳播網(wǎng)站的外部鏈接,即目前最好的。大大地。
如何被爬蟲(chóng)爬???
爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,比如百度的蜘蛛等。如果想讓你的網(wǎng)站更多的頁(yè)面是收錄,首先要讓網(wǎng)頁(yè)被爬蟲(chóng)抓取.
如果你的網(wǎng)站頁(yè)面更新頻繁,爬蟲(chóng)會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,優(yōu)質(zhì)內容是爬蟲(chóng)喜歡抓取的目標,尤其是原創(chuàng )內容。
如果你嘗試了很多,仍然沒(méi)有被爬蟲(chóng)爬取,可以看看工程師給出的兩個(gè)建議:
1、不建議本站使用js生成主要內容。如果js渲染不正確,可能會(huì )導致頁(yè)面內容讀取錯誤,導致爬蟲(chóng)無(wú)法抓取頁(yè)面。
2、許多網(wǎng)站都將針對爬蟲(chóng)進(jìn)行優(yōu)化。建議頁(yè)面長(cháng)度在128k以?xún)?,不要太長(cháng)。
SEO是用戶(hù)最感興趣的搜索服務(wù),最具有潛在的商業(yè)價(jià)值。這是一項長(cháng)期的工作,不能急于求成。在這個(gè)互聯(lián)網(wǎng)競爭的環(huán)境下,你應該比你的競爭對手多做一點(diǎn)。才有可能獲得質(zhì)的飛躍!
原文由好推建站提供:網(wǎng)站轉載時(shí)須以鏈接形式注明作者、原文出處及本聲明。
申請創(chuàng )業(yè)報告,分享創(chuàng )業(yè)好點(diǎn)子。點(diǎn)擊這里一起討論新的商機! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(項目招商找A5快速獲取精準代理名單說(shuō)到SEO)
項目投資找A5快速獲取精準代理商名單
說(shuō)到SEO,沒(méi)有人不熟悉。SEO中文翻譯為Search Engine Optimization,是指通過(guò)優(yōu)化網(wǎng)站來(lái)提高網(wǎng)站的關(guān)鍵詞排名,從而增加公司產(chǎn)品的曝光率。
在這個(gè)互聯(lián)網(wǎng)時(shí)代,很多人在購買(mǎi)新品之前都會(huì )上網(wǎng)查詢(xún)信息,看看哪些品牌的口碑和評價(jià)更好。這個(gè)時(shí)候,排名靠前的產(chǎn)品將占據絕對優(yōu)勢。據調查,87%的網(wǎng)民會(huì )使用搜索引擎服務(wù)尋找自己需要的信息,近70%的搜索者會(huì )直接在搜索結果自然排名的首頁(yè)找到自己需要的信息。
可見(jiàn),目前,SEO對于企業(yè)和產(chǎn)品有著(zhù)不可替代的意義。
關(guān)鍵詞 是重中之重
我們經(jīng)常聽(tīng)到人們談?wù)撽P(guān)鍵詞,但關(guān)鍵詞的具體用途是什么?關(guān)鍵詞是SEO的核心,也是網(wǎng)站在搜索引擎中排名的重要因素。
確定幾個(gè)關(guān)鍵詞對網(wǎng)站流量的提升會(huì )有很大的好處,但必須與網(wǎng)站和產(chǎn)品高度相關(guān)。同時(shí),您可以分析競爭對手的關(guān)鍵詞,從而了解自己和他人。當然,必須有一個(gè)核心關(guān)鍵詞,如果你做的是網(wǎng)站服務(wù),那么你的核心關(guān)鍵詞可以是:網(wǎng)站SEO,網(wǎng)站優(yōu)化;如果是其他產(chǎn)品,可以根據自己的產(chǎn)品或服務(wù)范圍進(jìn)行定位,比如:減肥、保濕、汽車(chē)保養等……
那么長(cháng)尾 關(guān)鍵詞 是什么?顧名思義,它實(shí)際上是一個(gè)比較長(cháng)的關(guān)鍵詞。長(cháng)尾關(guān)鍵詞的搜索量比較小,在企業(yè)文章、軟文中可以適當出現。
需要注意的是,關(guān)鍵詞的密度不能出現太多,但也不能太小。一般3%~6%比較合適。同樣,文章關(guān)鍵詞的文章最好不要出現太多,最好在3~5左右。
外部鏈接也會(huì )影響權重
入鏈也是網(wǎng)站優(yōu)化的一個(gè)很重要的過(guò)程,可以間接影響網(wǎng)站在搜索引擎中的權重。目前常用的鏈接分為:錨文本鏈接、超鏈接、純文本鏈接和圖片鏈接。
我們經(jīng)??吹胶芏嗑W(wǎng)站的地方都會(huì )有友情鏈接,但是隨著(zhù)百度算法的調整,友情鏈接的作用已經(jīng)很小了。目前通過(guò)軟文和圖片傳播鏈接的方法是最科學(xué)的方法,尤其是通過(guò)高質(zhì)量的軟文允許他人轉載傳播網(wǎng)站的外部鏈接,即目前最好的。大大地。
如何被爬蟲(chóng)爬???
爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,比如百度的蜘蛛等。如果想讓你的網(wǎng)站更多的頁(yè)面是收錄,首先要讓網(wǎng)頁(yè)被爬蟲(chóng)抓取.
如果你的網(wǎng)站頁(yè)面更新頻繁,爬蟲(chóng)會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,優(yōu)質(zhì)內容是爬蟲(chóng)喜歡抓取的目標,尤其是原創(chuàng )內容。
如果你嘗試了很多,仍然沒(méi)有被爬蟲(chóng)爬取,可以看看工程師給出的兩個(gè)建議:
1、不建議本站使用js生成主要內容。如果js渲染不正確,可能會(huì )導致頁(yè)面內容讀取錯誤,導致爬蟲(chóng)無(wú)法抓取頁(yè)面。
2、許多網(wǎng)站都將針對爬蟲(chóng)進(jìn)行優(yōu)化。建議頁(yè)面長(cháng)度在128k以?xún)?,不要太長(cháng)。
SEO是用戶(hù)最感興趣的搜索服務(wù),最具有潛在的商業(yè)價(jià)值。這是一項長(cháng)期的工作,不能急于求成。在這個(gè)互聯(lián)網(wǎng)競爭的環(huán)境下,你應該比你的競爭對手多做一點(diǎn)。才有可能獲得質(zhì)的飛躍!
原文由好推建站提供:網(wǎng)站轉載時(shí)須以鏈接形式注明作者、原文出處及本聲明。
申請創(chuàng )業(yè)報告,分享創(chuàng )業(yè)好點(diǎn)子。點(diǎn)擊這里一起討論新的商機!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(soup爬蟲(chóng)學(xué)習方法總結(一):SQL語(yǔ)句create數據)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-02-28 08:09
獲取響應內容:如果服務(wù)器能正常響應,就會(huì )得到一個(gè)Response。Response的內容就是要獲取的頁(yè)面的內容。響應的內容可能包括 HTML、Json 字符串、二進(jìn)制數據(如圖片和視頻)等。
解析內容:獲取的內容可能是HTML,可以用正則表達式和網(wǎng)頁(yè)解析庫進(jìn)行解析;可能是Json,可以直接轉成Json對象解析;它可能是二進(jìn)制數據,可以保存或進(jìn)一步處理。
保存數據:數據分析完成后保存。既可以存儲為文本文件,也可以存儲在數據庫中。
四、Python 爬蟲(chóng)實(shí)例
爬行動(dòng)物的定義、功能、原理等信息前面已經(jīng)介紹過(guò)了。相信很多小伙伴已經(jīng)開(kāi)始對爬蟲(chóng)產(chǎn)生了興趣,準備嘗試一下?,F在,我們來(lái)“干貨”,直接貼一個(gè)簡(jiǎn)單的Python爬蟲(chóng)代碼:
1.前期準備:安裝Python環(huán)境,安裝PYCHARM軟件,安裝MYSQL數據庫,新建數據庫考試,考試中建表屋,用于存儲爬蟲(chóng)結果【SQL語(yǔ)句:create table house(price varchar ( 88),unit varchar(88),area varchar(88));]
2.爬蟲(chóng)的目標:爬取鏈家租賃網(wǎng)首頁(yè)(url:)中所有房源的價(jià)格、單位、面積,然后將爬蟲(chóng)結構存入數據庫。
3.爬蟲(chóng)源碼:如下
import requests #請求URL頁(yè)面內容
from bs4 import BeautifulSoup #獲取頁(yè)面元素
import pymysql #鏈接數據庫
導入時(shí)間#time函數
import lxml #解析庫(支持HTML\XML解析,支持XPATH解析)
#get_page 功能:通過(guò)requests的get方法獲取url鏈接的內容,然后整合成BeautifulSoup可以處理的格式
def get_page(url):
響應 = requests.get(url)
湯= BeautifulSoup(response.text,'lxml')
回湯
#get_links函數的作用:獲取listing頁(yè)面上的所有出租鏈接
def get_links(link_url):
湯 = get_page(link_url)
links_div = soup.find_all('div',class_="pic-panel")
links=[div.a.get('href') for div in links_div]
返回鏈接
#get_house_info的作用是獲取一個(gè)出租頁(yè)面的信息:價(jià)格、單位、面積等。
def get_house_info(house_url):
湯=get_page(house_url)
價(jià)格 =soup.find('span',class_='total').text
unit = soup.find('span',class_='unit').text.strip()
area = 'test' #這里area字段我們自定義一個(gè)測試進(jìn)行測試
信息 = {
“價(jià)格”:價(jià)格,
“單位”:?jiǎn)挝唬?br /> “區域”:區域
}
返回信息
#數據庫配置信息寫(xiě)入字典
數據庫 = {
'主機': '127.0.0.1',
'數據庫':'考試',
“用戶(hù)”:“根”,
“密碼”:“根”,
'字符集':'utf8mb4'}
#鏈接數據庫
def get_db(設置):
返回 pymysql.connect(**設置)
#將爬蟲(chóng)獲取的數據插入數據庫
定義插入(分貝,房子):
值 = "'{}',"*2 + "'{}'"
sql_values=values.format(house['price'],house['unit'],house['area'])
sql="""
插入房屋(價(jià)格,單位,面積)值({})
""".format(sql_values)
游標 = db.cursor()
cursor.execute(sql)
mit()
#主程序流程:1.連接數據庫2.獲取每個(gè)listing信息的URL列表3.FOR循環(huán)從第一個(gè)URL開(kāi)始獲取具體信息(價(jià)格等)列表的4. 一一插入數據庫
db = get_db(數據庫)
鏈接 = get_links('#39;)
對于鏈接中的鏈接:
時(shí)間.sleep(2)
房子=get_house_info(鏈接)
插入(分貝,房子)
首先,“要想做好工作,必須先利其器”。用 Python 編寫(xiě)爬蟲(chóng)程序也是如此。在編寫(xiě)爬蟲(chóng)的過(guò)程中,需要導入各種庫文件。正是這些及其有用的庫文件幫助我們完成了爬蟲(chóng)。對于大部分工作,我們只需要調用相關(guān)的接口函數即可。導入格式為導入庫文件名。這里需要注意的是,要在PYCHARM中安裝庫文件,可以將光標放在庫文件名上同時(shí)按ctrl+alt鍵安裝庫文件,也可以是通過(guò)命令行安裝(pip安裝庫文件名),如果安裝失敗或者沒(méi)有安裝,后續爬蟲(chóng)肯定會(huì )報錯。在這段代碼中,程序前五行導入相關(guān)庫文件:requests用于請求URL頁(yè)面內容;BeautifulSoup 用于解析頁(yè)面元素;pymysql用于連接數據庫;time 收錄各種時(shí)間函數;lxml是一個(gè)解析庫,用于解析HTML、XML格式文件,也支持XPATH解析。
其次,我們從代碼末尾的主程序來(lái)看整個(gè)爬蟲(chóng)流程:
通過(guò) get_db 函數連接到數據庫。深入get_db函數,可以看到是通過(guò)調用
Pymysql的connect函數用于實(shí)現數據庫的連接。這里的**seting是Python采集關(guān)鍵字參數的一種方式。我們將數據庫的連接信息寫(xiě)入一個(gè)字典DataBase,并將字典中的信息傳遞給connect實(shí)現。參考。
使用get_links函數獲取鏈家首頁(yè)所有房源的鏈接。所有列表的鏈接都以列表的形式存儲在 Links 中。get_links函數首先通過(guò)requests請求獲取鏈家首頁(yè)的內容,然后通過(guò)BeautyfuSoup的接口對內容的格式進(jìn)行整理,轉化為自己可以處理的格式。最后通過(guò)電泳find_all函數找到所有收錄圖片的div樣式,然后用for循環(huán)獲取所有div樣式中收錄的超鏈接標簽(a)的內容(即href屬性的內容),所有超鏈接存儲在列表鏈接中。
通過(guò) FOR 循環(huán),遍歷 links 中的所有鏈接(例如,其中一個(gè)鏈接是:)
使用與2)相同的方法,通過(guò)find函數定位元素,獲取3)中鏈接中的價(jià)格、單位、地區信息,并將這些信息寫(xiě)入字典Info。
調用insert函數,將鏈接中獲取的Info信息寫(xiě)入到數據庫的house表中。深入insert函數可知,它通過(guò)數據庫游標函數cursor()執行一條SQL語(yǔ)句,然后數據庫執行commit操作,實(shí)現響應功能。SQL 語(yǔ)句在這里以一種特殊的方式編寫(xiě)。
給格式化函數格式化,這是為了方便函數的復用。
最后運行爬蟲(chóng)代碼,可以看到鏈家首頁(yè)所有房源信息都寫(xiě)入了數據中。(注:test是我手動(dòng)指定的測試字符串)
后記:其實(shí)Python爬蟲(chóng)并不難。在熟悉了整個(gè)爬取過(guò)程之后,需要注意一些細節,比如如何獲取頁(yè)面元素,如何構造SQL語(yǔ)句等等。遇到問(wèn)題不要慌張,可以通過(guò)查看IDE的提示一一排除bug,最終得到我們期望的結構。
最后:
可以獲取我的個(gè)人V:atstudy-js,可以免費獲取10G軟件測試工程師面試合集文檔。并免費分享對應的視頻學(xué)習教程!,包括基礎知識、Linux要領(lǐng)、Mysql數據庫、抓包工具、接口測試工具、高級測試——Python編程、Web自動(dòng)化測試、APP自動(dòng)化測試、接口自動(dòng)化測試、測試高級持續集成、測試架構開(kāi)發(fā)測試框架,性能測試等
這些測試數據應該是做【軟件測試】的朋友最全面最完整的準備倉庫了。這個(gè)倉庫也陪我走過(guò)了最艱難的旅程,希望也能幫到你! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(soup爬蟲(chóng)學(xué)習方法總結(一):SQL語(yǔ)句create數據)
獲取響應內容:如果服務(wù)器能正常響應,就會(huì )得到一個(gè)Response。Response的內容就是要獲取的頁(yè)面的內容。響應的內容可能包括 HTML、Json 字符串、二進(jìn)制數據(如圖片和視頻)等。
解析內容:獲取的內容可能是HTML,可以用正則表達式和網(wǎng)頁(yè)解析庫進(jìn)行解析;可能是Json,可以直接轉成Json對象解析;它可能是二進(jìn)制數據,可以保存或進(jìn)一步處理。
保存數據:數據分析完成后保存。既可以存儲為文本文件,也可以存儲在數據庫中。
四、Python 爬蟲(chóng)實(shí)例
爬行動(dòng)物的定義、功能、原理等信息前面已經(jīng)介紹過(guò)了。相信很多小伙伴已經(jīng)開(kāi)始對爬蟲(chóng)產(chǎn)生了興趣,準備嘗試一下?,F在,我們來(lái)“干貨”,直接貼一個(gè)簡(jiǎn)單的Python爬蟲(chóng)代碼:
1.前期準備:安裝Python環(huán)境,安裝PYCHARM軟件,安裝MYSQL數據庫,新建數據庫考試,考試中建表屋,用于存儲爬蟲(chóng)結果【SQL語(yǔ)句:create table house(price varchar ( 88),unit varchar(88),area varchar(88));]
2.爬蟲(chóng)的目標:爬取鏈家租賃網(wǎng)首頁(yè)(url:)中所有房源的價(jià)格、單位、面積,然后將爬蟲(chóng)結構存入數據庫。
3.爬蟲(chóng)源碼:如下
import requests #請求URL頁(yè)面內容
from bs4 import BeautifulSoup #獲取頁(yè)面元素
import pymysql #鏈接數據庫
導入時(shí)間#time函數
import lxml #解析庫(支持HTML\XML解析,支持XPATH解析)
#get_page 功能:通過(guò)requests的get方法獲取url鏈接的內容,然后整合成BeautifulSoup可以處理的格式
def get_page(url):
響應 = requests.get(url)
湯= BeautifulSoup(response.text,'lxml')
回湯
#get_links函數的作用:獲取listing頁(yè)面上的所有出租鏈接
def get_links(link_url):
湯 = get_page(link_url)
links_div = soup.find_all('div',class_="pic-panel")
links=[div.a.get('href') for div in links_div]
返回鏈接
#get_house_info的作用是獲取一個(gè)出租頁(yè)面的信息:價(jià)格、單位、面積等。
def get_house_info(house_url):
湯=get_page(house_url)
價(jià)格 =soup.find('span',class_='total').text
unit = soup.find('span',class_='unit').text.strip()
area = 'test' #這里area字段我們自定義一個(gè)測試進(jìn)行測試
信息 = {
“價(jià)格”:價(jià)格,
“單位”:?jiǎn)挝唬?br /> “區域”:區域
}
返回信息
#數據庫配置信息寫(xiě)入字典
數據庫 = {
'主機': '127.0.0.1',
'數據庫':'考試',
“用戶(hù)”:“根”,
“密碼”:“根”,
'字符集':'utf8mb4'}
#鏈接數據庫
def get_db(設置):
返回 pymysql.connect(**設置)
#將爬蟲(chóng)獲取的數據插入數據庫
定義插入(分貝,房子):
值 = "'{}',"*2 + "'{}'"
sql_values=values.format(house['price'],house['unit'],house['area'])
sql="""
插入房屋(價(jià)格,單位,面積)值({})
""".format(sql_values)
游標 = db.cursor()
cursor.execute(sql)
mit()
#主程序流程:1.連接數據庫2.獲取每個(gè)listing信息的URL列表3.FOR循環(huán)從第一個(gè)URL開(kāi)始獲取具體信息(價(jià)格等)列表的4. 一一插入數據庫
db = get_db(數據庫)
鏈接 = get_links('#39;)
對于鏈接中的鏈接:
時(shí)間.sleep(2)
房子=get_house_info(鏈接)
插入(分貝,房子)
首先,“要想做好工作,必須先利其器”。用 Python 編寫(xiě)爬蟲(chóng)程序也是如此。在編寫(xiě)爬蟲(chóng)的過(guò)程中,需要導入各種庫文件。正是這些及其有用的庫文件幫助我們完成了爬蟲(chóng)。對于大部分工作,我們只需要調用相關(guān)的接口函數即可。導入格式為導入庫文件名。這里需要注意的是,要在PYCHARM中安裝庫文件,可以將光標放在庫文件名上同時(shí)按ctrl+alt鍵安裝庫文件,也可以是通過(guò)命令行安裝(pip安裝庫文件名),如果安裝失敗或者沒(méi)有安裝,后續爬蟲(chóng)肯定會(huì )報錯。在這段代碼中,程序前五行導入相關(guān)庫文件:requests用于請求URL頁(yè)面內容;BeautifulSoup 用于解析頁(yè)面元素;pymysql用于連接數據庫;time 收錄各種時(shí)間函數;lxml是一個(gè)解析庫,用于解析HTML、XML格式文件,也支持XPATH解析。
其次,我們從代碼末尾的主程序來(lái)看整個(gè)爬蟲(chóng)流程:
通過(guò) get_db 函數連接到數據庫。深入get_db函數,可以看到是通過(guò)調用
Pymysql的connect函數用于實(shí)現數據庫的連接。這里的**seting是Python采集關(guān)鍵字參數的一種方式。我們將數據庫的連接信息寫(xiě)入一個(gè)字典DataBase,并將字典中的信息傳遞給connect實(shí)現。參考。
使用get_links函數獲取鏈家首頁(yè)所有房源的鏈接。所有列表的鏈接都以列表的形式存儲在 Links 中。get_links函數首先通過(guò)requests請求獲取鏈家首頁(yè)的內容,然后通過(guò)BeautyfuSoup的接口對內容的格式進(jìn)行整理,轉化為自己可以處理的格式。最后通過(guò)電泳find_all函數找到所有收錄圖片的div樣式,然后用for循環(huán)獲取所有div樣式中收錄的超鏈接標簽(a)的內容(即href屬性的內容),所有超鏈接存儲在列表鏈接中。
通過(guò) FOR 循環(huán),遍歷 links 中的所有鏈接(例如,其中一個(gè)鏈接是:)
使用與2)相同的方法,通過(guò)find函數定位元素,獲取3)中鏈接中的價(jià)格、單位、地區信息,并將這些信息寫(xiě)入字典Info。
調用insert函數,將鏈接中獲取的Info信息寫(xiě)入到數據庫的house表中。深入insert函數可知,它通過(guò)數據庫游標函數cursor()執行一條SQL語(yǔ)句,然后數據庫執行commit操作,實(shí)現響應功能。SQL 語(yǔ)句在這里以一種特殊的方式編寫(xiě)。
給格式化函數格式化,這是為了方便函數的復用。
最后運行爬蟲(chóng)代碼,可以看到鏈家首頁(yè)所有房源信息都寫(xiě)入了數據中。(注:test是我手動(dòng)指定的測試字符串)

后記:其實(shí)Python爬蟲(chóng)并不難。在熟悉了整個(gè)爬取過(guò)程之后,需要注意一些細節,比如如何獲取頁(yè)面元素,如何構造SQL語(yǔ)句等等。遇到問(wèn)題不要慌張,可以通過(guò)查看IDE的提示一一排除bug,最終得到我們期望的結構。
最后:
可以獲取我的個(gè)人V:atstudy-js,可以免費獲取10G軟件測試工程師面試合集文檔。并免費分享對應的視頻學(xué)習教程!,包括基礎知識、Linux要領(lǐng)、Mysql數據庫、抓包工具、接口測試工具、高級測試——Python編程、Web自動(dòng)化測試、APP自動(dòng)化測試、接口自動(dòng)化測試、測試高級持續集成、測試架構開(kāi)發(fā)測試框架,性能測試等
這些測試數據應該是做【軟件測試】的朋友最全面最完整的準備倉庫了。這個(gè)倉庫也陪我走過(guò)了最艱難的旅程,希望也能幫到你!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-02-26 19:04
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢,不知道能不能用requests抓取下來(lái)。
哈哈~個(gè)人更推薦使用flask相對于python自帶的那些功能它基本上都有對于web爬蟲(chóng)我更喜歡flask,用起來(lái)也簡(jiǎn)單而且python本身沒(méi)有這方面的框架,還是跟著(zhù)別人學(xué)吧上面那個(gè)寫(xiě)爬蟲(chóng)的寫(xiě)的的很清楚,
首先你要確定你是想要抓取哪些圖片網(wǎng)站的圖片。網(wǎng)站上的爬蟲(chóng)是不是有對圖片url地址進(jìn)行針對性地查找,然后發(fā)現該網(wǎng)站上已經(jīng)有圖片。一般的爬蟲(chóng)能力沒(méi)有那么強大。推薦用蜘蛛程序爬下來(lái),進(jìn)行一個(gè)下載工作?;蛘邎D片搜索工具對圖片信息進(jìn)行爬取。
據我所知微信公眾號圖文消息的接口不能爬取圖片,你可以選擇把那個(gè)接口轉換成抓取類(lèi),直接抓取。
我目前用了兩個(gè)微信公眾號的接口,一個(gè)搜,一個(gè)推。其中公眾號搜是圖片接口,可以抓取其它地方的,比如說(shuō)我的知乎。
建議使用像flask這種pythonweb框架,
額,我剛接觸爬蟲(chóng)沒(méi)多久,目前采用圖片鏈接去抓取微信文章的圖片,剛開(kāi)始學(xué),
可以用戶(hù)工具箱
我也試了各種方式都沒(méi)成功好煩人
實(shí)在不行就編寫(xiě)個(gè)爬蟲(chóng)程序
這些微信公眾號都會(huì )放一些免費圖片的鏈接供爬取,但是僅限原創(chuàng )文章。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢,不知道能不能用requests抓取下來(lái)。
哈哈~個(gè)人更推薦使用flask相對于python自帶的那些功能它基本上都有對于web爬蟲(chóng)我更喜歡flask,用起來(lái)也簡(jiǎn)單而且python本身沒(méi)有這方面的框架,還是跟著(zhù)別人學(xué)吧上面那個(gè)寫(xiě)爬蟲(chóng)的寫(xiě)的的很清楚,
首先你要確定你是想要抓取哪些圖片網(wǎng)站的圖片。網(wǎng)站上的爬蟲(chóng)是不是有對圖片url地址進(jìn)行針對性地查找,然后發(fā)現該網(wǎng)站上已經(jīng)有圖片。一般的爬蟲(chóng)能力沒(méi)有那么強大。推薦用蜘蛛程序爬下來(lái),進(jìn)行一個(gè)下載工作?;蛘邎D片搜索工具對圖片信息進(jìn)行爬取。
據我所知微信公眾號圖文消息的接口不能爬取圖片,你可以選擇把那個(gè)接口轉換成抓取類(lèi),直接抓取。
我目前用了兩個(gè)微信公眾號的接口,一個(gè)搜,一個(gè)推。其中公眾號搜是圖片接口,可以抓取其它地方的,比如說(shuō)我的知乎。
建議使用像flask這種pythonweb框架,
額,我剛接觸爬蟲(chóng)沒(méi)多久,目前采用圖片鏈接去抓取微信文章的圖片,剛開(kāi)始學(xué),
可以用戶(hù)工具箱
我也試了各種方式都沒(méi)成功好煩人
實(shí)在不行就編寫(xiě)個(gè)爬蟲(chóng)程序
這些微信公眾號都會(huì )放一些免費圖片的鏈接供爬取,但是僅限原創(chuàng )文章。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一第一時(shí)間解決?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-02-26 15:20
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看
1. 概述
本文主要實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),目的是從百度貼吧頁(yè)面下載圖片。下載圖片的步驟如下:
(1)獲取網(wǎng)頁(yè)的html文本內容;
(2)分析html中圖片的html標簽特征,使用正則解析得到所有圖片url鏈接的列表;
(3)根據圖片的url鏈接列表將圖片下載到本地文件夾。
2. urllib+re 實(shí)現
<p>1#!/usr/bin/python
2# coding:utf-8
3# 實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),爬取百度貼吧圖片
4import urllib
5import re
6# 根據url獲取網(wǎng)頁(yè)html內容
7def getHtmlContent(url):
8 page = urllib.urlopen(url)
9
10return page.read()
11# 從html中解析出所有jpg圖片的url
12# 百度貼吧html中jpg圖片的url格式為:XXX.jpg
13def getJPGs(html):
14# 解析jpg圖片url的正則
15 jpgReg = re.compile(r' 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一第一時(shí)間解決?(圖))
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看

1. 概述
本文主要實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),目的是從百度貼吧頁(yè)面下載圖片。下載圖片的步驟如下:
(1)獲取網(wǎng)頁(yè)的html文本內容;
(2)分析html中圖片的html標簽特征,使用正則解析得到所有圖片url鏈接的列表;
(3)根據圖片的url鏈接列表將圖片下載到本地文件夾。
2. urllib+re 實(shí)現
<p>1#!/usr/bin/python
2# coding:utf-8
3# 實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),爬取百度貼吧圖片
4import urllib
5import re
6# 根據url獲取網(wǎng)頁(yè)html內容
7def getHtmlContent(url):
8 page = urllib.urlopen(url)
9
10return page.read()
11# 從html中解析出所有jpg圖片的url
12# 百度貼吧html中jpg圖片的url格式為:XXX.jpg
13def getJPGs(html):
14# 解析jpg圖片url的正則
15 jpgReg = re.compile(r'
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖) )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-03-15 00:00
)
網(wǎng)絡(luò )爬蟲(chóng)主要分為4大板塊:
分析具有明確目標的網(wǎng)頁(yè)結構,
在網(wǎng)頁(yè)中查找信息的地址,
抓取信息,
保存信息
以下以網(wǎng)絡(luò )爬蟲(chóng)抓取百度圖片貓的圖片為例進(jìn)行演示
項目案例:
爬取百度所有狗圖片網(wǎng)站
步驟分析:第一步:明確目標,我們將百度的狗圖片作為目標爬取,分析網(wǎng)頁(yè)結構
1、輸入以下網(wǎng)址
^00_1583X672&word=狗
2、選擇下一頁(yè)時(shí),只有pn和gsm值發(fā)生了變化。
到目前為止,我所知道的是:pn參數代表頁(yè)數; word參數自然是關(guān)鍵詞,需要轉換編碼格式。
gsm 的值,隨意更改似乎沒(méi)有任何作用。有句話(huà)說(shuō)gsm:代表pn的十六進(jìn)制值
3、可以拼接出頁(yè)面請求的URL,代碼如下
import sys
import urllib
import requests
def getPage(keyword, page, n):
page = page * n
keyword = urllib.parse.quote(keyword, safe='/')
url_begin = "http://image.baidu.com/search/ ... ot%3B
url = url_begin + keyword + "&pn=" + str(page) + "&gsm=" + str(hex(page)) + "&ct=&ic=0&lm=-1&width=0&height=0"
return url
第二步:在網(wǎng)頁(yè)中查找圖片地址
1、右鍵查看網(wǎng)頁(yè)源代碼,分析JSON數據可以看到objURL字段代表原圖的下載路徑
2、根據URL地址,獲取圖片地址的代碼為:
def get_onepage_urls(onepageurl):
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
return pic_urls
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
return pic_urls
三、爬取圖片并保存
def down_pic(pic_urls):
"""給出圖片鏈接列表, 下載所有圖片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = 'data2/'+str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下載第%s張圖片時(shí)失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
四、調用函數
if __name__ == '__main__':
keyword = '狗' # 關(guān)鍵詞, 改為你想輸入的詞即可, 相當于在百度圖片里搜索一樣
page_begin = 0
page_number = 30
image_number = 3
all_pic_urls = []
while 1:
if page_begin > image_number:
break
print("第%d次請求數據", [page_begin])
url = getPage(keyword, page_begin, page_number)
onepage_urls = get_onepage_urls(url)
page_begin += 1
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)爬取百度圖片貓的圖片為案例演示(圖)
)
網(wǎng)絡(luò )爬蟲(chóng)主要分為4大板塊:
分析具有明確目標的網(wǎng)頁(yè)結構,
在網(wǎng)頁(yè)中查找信息的地址,
抓取信息,
保存信息
以下以網(wǎng)絡(luò )爬蟲(chóng)抓取百度圖片貓的圖片為例進(jìn)行演示
項目案例:
爬取百度所有狗圖片網(wǎng)站
步驟分析:第一步:明確目標,我們將百度的狗圖片作為目標爬取,分析網(wǎng)頁(yè)結構
1、輸入以下網(wǎng)址
^00_1583X672&word=狗

2、選擇下一頁(yè)時(shí),只有pn和gsm值發(fā)生了變化。


到目前為止,我所知道的是:pn參數代表頁(yè)數; word參數自然是關(guān)鍵詞,需要轉換編碼格式。
gsm 的值,隨意更改似乎沒(méi)有任何作用。有句話(huà)說(shuō)gsm:代表pn的十六進(jìn)制值
3、可以拼接出頁(yè)面請求的URL,代碼如下
import sys
import urllib
import requests
def getPage(keyword, page, n):
page = page * n
keyword = urllib.parse.quote(keyword, safe='/')
url_begin = "http://image.baidu.com/search/ ... ot%3B
url = url_begin + keyword + "&pn=" + str(page) + "&gsm=" + str(hex(page)) + "&ct=&ic=0&lm=-1&width=0&height=0"
return url
第二步:在網(wǎng)頁(yè)中查找圖片地址
1、右鍵查看網(wǎng)頁(yè)源代碼,分析JSON數據可以看到objURL字段代表原圖的下載路徑

2、根據URL地址,獲取圖片地址的代碼為:
def get_onepage_urls(onepageurl):
try:
html = requests.get(onepageurl).text
except Exception as e:
print(e)
pic_urls = []
return pic_urls
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
return pic_urls
三、爬取圖片并保存
def down_pic(pic_urls):
"""給出圖片鏈接列表, 下載所有圖片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = 'data2/'+str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下載第%s張圖片時(shí)失敗: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
四、調用函數
if __name__ == '__main__':
keyword = '狗' # 關(guān)鍵詞, 改為你想輸入的詞即可, 相當于在百度圖片里搜索一樣
page_begin = 0
page_number = 30
image_number = 3
all_pic_urls = []
while 1:
if page_begin > image_number:
break
print("第%d次請求數據", [page_begin])
url = getPage(keyword, page_begin, page_number)
onepage_urls = get_onepage_urls(url)
page_begin += 1
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))


網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(怎么老是靜不下心來(lái)心來(lái)搞定一方面的技術(shù),再學(xué)點(diǎn)其他的東西)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 60 次瀏覽 ? 2022-03-12 03:11
我對xmfdsh真的很感興趣,為什么不能靜下心來(lái)搞定一個(gè)方面的技術(shù),然后再學(xué)習其他的東西,一步一步來(lái),好吧,我又要去學(xué)習網(wǎng)絡(luò )爬蟲(chóng)了,這是一個(gè)簡(jiǎn)單的版本,參考網(wǎng)上很多資料,用C#寫(xiě)的,專(zhuān)門(mén)抓圖,可以抓一些需要cookies的網(wǎng)站,所以功能還是挺全的,xmfdsh才研究了三天,所以有仍有很大的改進(jìn)空間。我會(huì )慢慢改進(jìn)的。我將在本文末尾附上整個(gè)項目。獻給喜歡學(xué)習C#的朋友。讓我慢慢說(shuō):
#region 訪(fǎng)問(wèn)數據 + Request(int index)
///
/// 訪(fǎng)問(wèn)數據
///
private void Request(int index)
{
try
{
int depth;
string url = "";
//lock鎖住Dictionary,因為Dictionary多線(xiàn)程會(huì )出錯
lock (_locker)
{
//查看是否還存在未下載的鏈接
if (UnDownLoad.Count 0)
{
MemoryStream ms = new System.IO.MemoryStream(rs.Data, 0, read);
BinaryReader reader = new BinaryReader(ms);
byte[] buffer = new byte[32 * 1024];
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
rs.memoryStream.Write(buffer, 0, read);
}
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
else
{
read = responseStream.EndRead(ar);
if (read > 0)
{
//創(chuàng )建內存流
MemoryStream ms = new MemoryStream(rs.Data, 0, read);
StreamReader reader = new StreamReader(ms, Encoding.GetEncoding("gb2312"));
string str = reader.ReadToEnd();
//添加到末尾
rs.Html.Append(str);
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
if (url.Contains(".jpg") || url.Contains(".png"))
{
//images = rs.Images;
SaveContents(rs.memoryStream.GetBuffer(), url);
}
else
{
html = rs.Html.ToString();
//保存
SaveContents(html, url);
//獲取頁(yè)面的鏈接
}
}
catch (Exception ex)
{
_reqsBusy[rs.Index] = false;
DispatchWork();
}
List links = GetLinks(html,url);
//得到過(guò)濾后的鏈接,并保存到未下載集合
AddUrls(links, depth + 1);
_reqsBusy[index] = false;
DispatchWork();
}
#endregion
這就是數據的處理,這是這里的重點(diǎn)。其實(shí)不難判斷是不是圖片。如果是圖片,把圖片存起來(lái),因為在目前的網(wǎng)絡(luò )爬蟲(chóng)還不夠先進(jìn)的情況下,爬取圖片比較實(shí)用有趣。(不要急著(zhù)找出哪個(gè)網(wǎng)站有很多女孩的照片),如果不是圖片,我們認為是正常的html頁(yè)面,然后閱讀html代碼,如果有鏈接http或 href,它將被添加到下載鏈接。當然,對于我們閱讀的鏈接,我們已經(jīng)限制了一些js或者一些css(不要閱讀這樣的東西)。
private void SaveContents(byte[] images, string url)
{
if (images.Count() < 1024*30)
return;
if (url.Contains(".jpg"))
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".jpg", images);
Console.WriteLine("圖片保存成功" + url);
}
else
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".png", images);
Console.WriteLine("圖片保存成功" + url);
}
}
#region 提取頁(yè)面鏈接 + List GetLinks(string html)
///
/// 提取頁(yè)面鏈接
///
///
///
private List GetLinks(string html,string url)
{
//匹配http鏈接
const string pattern2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
Regex r2 = new Regex(pattern2, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m2 = r2.Matches(html);
List links = new List();
for (int i = 0; i < m2.Count; i++)
{
//這個(gè)原因是w3school的網(wǎng)址,但里面的東西明顯不是我們想要的
if (m2[i].ToString().Contains("www.w3.org"))
continue;
links.Add(m2[i].ToString());
}
//匹配href里面的鏈接,并加到主網(wǎng)址上(學(xué)網(wǎng)站的你懂的)
const string pattern = @"href=([""'])?(?[^'""]+)\1[^>]*";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m = r.Matches(html);
// List links = new List();
for (int i = 0; i < m.Count; i++)
{
string href1 = m[i].ToString().Replace("href=", "");
href1 = href1.Replace("\"", "");
//找到符合的,添加到主網(wǎng)址(一開(kāi)始輸入的網(wǎng)址)里面去
string href = RootUrl + href1;
if (m[i].ToString().Contains("www.w3.org"))
continue;
links.Add(href);
}
return links;
}
#endregion
提取頁(yè)面鏈接的方法,當閱讀發(fā)現這是html代碼時(shí),繼續解釋里面的代碼,找到里面的url鏈接,這正是擁有網(wǎng)絡(luò )爬蟲(chóng)功能的方法(不然會(huì )很無(wú)聊只提取這個(gè)頁(yè)面),這里當然應該提取http鏈接,href中的字是因為。. . . (學(xué)網(wǎng)站你懂的,很難解釋?zhuān)缀跛械膱D片都放在里面,文章,所以上面有href之類(lèi)的代碼要處理。
#region 添加url到 UnDownLoad 集合 + AddUrls(List urls, int depth)
///
/// 添加url到 UnDownLoad 集合
///
///
///
private void AddUrls(List urls, int depth)
{
lock (_locker)
{
if (depth >= MAXDEPTH)
{
//深度過(guò)大
return;
}
foreach (string url in urls)
{
string cleanUrl = url.Trim();
int end = cleanUrl.IndexOf(' ');
if (end > 0)
{
cleanUrl = cleanUrl.Substring(0, end);
}
if (UrlAvailable(cleanUrl))
{
UnDownLoad.Add(cleanUrl, depth);
}
}
}
}
#endregion
#region 開(kāi)始捕獲 + DispatchWork()
///
/// 開(kāi)始捕獲
///
private void DispatchWork()
{
for (int i = 0; i < _reqCount; i++)
{
if (!_reqsBusy[i])
{
Request(i);
Thread.Sleep(1000);
}
}
}
#endregion
此功能是為了使這些錯誤起作用。_reqCount 的值在開(kāi)頭設置。事實(shí)上,視覺(jué)上的理解就是你發(fā)布的 bug 的數量。在這個(gè)程序中,我默認放了20個(gè),可以隨時(shí)修改。對于一些需要cookies的網(wǎng)站,就是通過(guò)訪(fǎng)問(wèn)開(kāi)頭輸入的URL,當然也可以使用HttpWebRequest輔助類(lèi),cookies = request.CookieContainer; //保存cookie,以后訪(fǎng)問(wèn)后續URL時(shí)添加就行 request.CookieContainer = cookies; //餅干嘗試。對于 網(wǎng)站 只能通過(guò)應用 cookie 訪(fǎng)問(wèn),不需要根網(wǎng)頁(yè),就像不需要百度圖片的 URL,但如果訪(fǎng)問(wèn)里面的圖片很突然,cookie會(huì )附上,所以這個(gè)問(wèn)題也解決了。xmfdsh 發(fā)現這個(gè)程序中還有一些網(wǎng)站不能抓圖。當捕捉到一定數量的照片時(shí)它會(huì )停止。具體原因不明,以后慢慢完善。
附上源碼:%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB.rar 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(怎么老是靜不下心來(lái)心來(lái)搞定一方面的技術(shù),再學(xué)點(diǎn)其他的東西)
我對xmfdsh真的很感興趣,為什么不能靜下心來(lái)搞定一個(gè)方面的技術(shù),然后再學(xué)習其他的東西,一步一步來(lái),好吧,我又要去學(xué)習網(wǎng)絡(luò )爬蟲(chóng)了,這是一個(gè)簡(jiǎn)單的版本,參考網(wǎng)上很多資料,用C#寫(xiě)的,專(zhuān)門(mén)抓圖,可以抓一些需要cookies的網(wǎng)站,所以功能還是挺全的,xmfdsh才研究了三天,所以有仍有很大的改進(jìn)空間。我會(huì )慢慢改進(jìn)的。我將在本文末尾附上整個(gè)項目。獻給喜歡學(xué)習C#的朋友。讓我慢慢說(shuō):
#region 訪(fǎng)問(wèn)數據 + Request(int index)
///
/// 訪(fǎng)問(wèn)數據
///
private void Request(int index)
{
try
{
int depth;
string url = "";
//lock鎖住Dictionary,因為Dictionary多線(xiàn)程會(huì )出錯
lock (_locker)
{
//查看是否還存在未下載的鏈接
if (UnDownLoad.Count 0)
{
MemoryStream ms = new System.IO.MemoryStream(rs.Data, 0, read);
BinaryReader reader = new BinaryReader(ms);
byte[] buffer = new byte[32 * 1024];
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
rs.memoryStream.Write(buffer, 0, read);
}
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
else
{
read = responseStream.EndRead(ar);
if (read > 0)
{
//創(chuàng )建內存流
MemoryStream ms = new MemoryStream(rs.Data, 0, read);
StreamReader reader = new StreamReader(ms, Encoding.GetEncoding("gb2312"));
string str = reader.ReadToEnd();
//添加到末尾
rs.Html.Append(str);
//遞歸 再次請求數據
var result = responseStream.BeginRead(rs.Data, 0, rs.BufferSize, new AsyncCallback(ReceivedData), rs);
return;
}
}
if (url.Contains(".jpg") || url.Contains(".png"))
{
//images = rs.Images;
SaveContents(rs.memoryStream.GetBuffer(), url);
}
else
{
html = rs.Html.ToString();
//保存
SaveContents(html, url);
//獲取頁(yè)面的鏈接
}
}
catch (Exception ex)
{
_reqsBusy[rs.Index] = false;
DispatchWork();
}
List links = GetLinks(html,url);
//得到過(guò)濾后的鏈接,并保存到未下載集合
AddUrls(links, depth + 1);
_reqsBusy[index] = false;
DispatchWork();
}
#endregion
這就是數據的處理,這是這里的重點(diǎn)。其實(shí)不難判斷是不是圖片。如果是圖片,把圖片存起來(lái),因為在目前的網(wǎng)絡(luò )爬蟲(chóng)還不夠先進(jìn)的情況下,爬取圖片比較實(shí)用有趣。(不要急著(zhù)找出哪個(gè)網(wǎng)站有很多女孩的照片),如果不是圖片,我們認為是正常的html頁(yè)面,然后閱讀html代碼,如果有鏈接http或 href,它將被添加到下載鏈接。當然,對于我們閱讀的鏈接,我們已經(jīng)限制了一些js或者一些css(不要閱讀這樣的東西)。
private void SaveContents(byte[] images, string url)
{
if (images.Count() < 1024*30)
return;
if (url.Contains(".jpg"))
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".jpg", images);
Console.WriteLine("圖片保存成功" + url);
}
else
{
File.WriteAllBytes(@"d:\網(wǎng)絡(luò )爬蟲(chóng)圖片\" + _index++ + ".png", images);
Console.WriteLine("圖片保存成功" + url);
}
}
#region 提取頁(yè)面鏈接 + List GetLinks(string html)
///
/// 提取頁(yè)面鏈接
///
///
///
private List GetLinks(string html,string url)
{
//匹配http鏈接
const string pattern2 = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
Regex r2 = new Regex(pattern2, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m2 = r2.Matches(html);
List links = new List();
for (int i = 0; i < m2.Count; i++)
{
//這個(gè)原因是w3school的網(wǎng)址,但里面的東西明顯不是我們想要的
if (m2[i].ToString().Contains("www.w3.org"))
continue;
links.Add(m2[i].ToString());
}
//匹配href里面的鏈接,并加到主網(wǎng)址上(學(xué)網(wǎng)站的你懂的)
const string pattern = @"href=([""'])?(?[^'""]+)\1[^>]*";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
//獲得匹配結果
MatchCollection m = r.Matches(html);
// List links = new List();
for (int i = 0; i < m.Count; i++)
{
string href1 = m[i].ToString().Replace("href=", "");
href1 = href1.Replace("\"", "");
//找到符合的,添加到主網(wǎng)址(一開(kāi)始輸入的網(wǎng)址)里面去
string href = RootUrl + href1;
if (m[i].ToString().Contains("www.w3.org"))
continue;
links.Add(href);
}
return links;
}
#endregion
提取頁(yè)面鏈接的方法,當閱讀發(fā)現這是html代碼時(shí),繼續解釋里面的代碼,找到里面的url鏈接,這正是擁有網(wǎng)絡(luò )爬蟲(chóng)功能的方法(不然會(huì )很無(wú)聊只提取這個(gè)頁(yè)面),這里當然應該提取http鏈接,href中的字是因為。. . . (學(xué)網(wǎng)站你懂的,很難解釋?zhuān)缀跛械膱D片都放在里面,文章,所以上面有href之類(lèi)的代碼要處理。
#region 添加url到 UnDownLoad 集合 + AddUrls(List urls, int depth)
///
/// 添加url到 UnDownLoad 集合
///
///
///
private void AddUrls(List urls, int depth)
{
lock (_locker)
{
if (depth >= MAXDEPTH)
{
//深度過(guò)大
return;
}
foreach (string url in urls)
{
string cleanUrl = url.Trim();
int end = cleanUrl.IndexOf(' ');
if (end > 0)
{
cleanUrl = cleanUrl.Substring(0, end);
}
if (UrlAvailable(cleanUrl))
{
UnDownLoad.Add(cleanUrl, depth);
}
}
}
}
#endregion
#region 開(kāi)始捕獲 + DispatchWork()
///
/// 開(kāi)始捕獲
///
private void DispatchWork()
{
for (int i = 0; i < _reqCount; i++)
{
if (!_reqsBusy[i])
{
Request(i);
Thread.Sleep(1000);
}
}
}
#endregion
此功能是為了使這些錯誤起作用。_reqCount 的值在開(kāi)頭設置。事實(shí)上,視覺(jué)上的理解就是你發(fā)布的 bug 的數量。在這個(gè)程序中,我默認放了20個(gè),可以隨時(shí)修改。對于一些需要cookies的網(wǎng)站,就是通過(guò)訪(fǎng)問(wèn)開(kāi)頭輸入的URL,當然也可以使用HttpWebRequest輔助類(lèi),cookies = request.CookieContainer; //保存cookie,以后訪(fǎng)問(wèn)后續URL時(shí)添加就行 request.CookieContainer = cookies; //餅干嘗試。對于 網(wǎng)站 只能通過(guò)應用 cookie 訪(fǎng)問(wèn),不需要根網(wǎng)頁(yè),就像不需要百度圖片的 URL,但如果訪(fǎng)問(wèn)里面的圖片很突然,cookie會(huì )附上,所以這個(gè)問(wèn)題也解決了。xmfdsh 發(fā)現這個(gè)程序中還有一些網(wǎng)站不能抓圖。當捕捉到一定數量的照片時(shí)它會(huì )停止。具體原因不明,以后慢慢完善。
附上源碼:%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB.rar
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-03-12 03:11
一、介紹
我學(xué)習 Python 已經(jīng)有一段時(shí)間了。聽(tīng)說(shuō)Python爬蟲(chóng)很厲害。我現在才學(xué)到這個(gè)。跟著(zhù)小龜的Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,可以實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載。
二、代碼
__author__ = "JentZhang"
import urllib.request
import os
import random
import re
def url_open(url):
'''
打開(kāi)網(wǎng)頁(yè)
:param url:
:return:
'''
req = urllib.request.Request(url)
req.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36')
# 應用代理
'''
proxyies = ["111.155.116.237:8123","101.236.23.202:8866","122.114.31.177:808"]
proxy = random.choice(proxyies)
proxy_support = urllib.request.ProxyHandler({"http": proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
'''
response = urllib.request.urlopen(url)
html = response.read()
return html
def save_img(folder, img_addrs):
'''
保存圖片
:param folder: 要保存的文件夾
:param img_addrs: 圖片地址(列表)
:return:
'''
# 創(chuàng )建文件夾用來(lái)存放圖片
if not os.path.exists(folder):
os.mkdir(folder)
os.chdir(folder)
for each in img_addrs:
filename = each.split('/')[-1]
try:
with open(filename, 'wb') as f:
img = url_open("http:" + each)
f.write(img)
except urllib.error.HTTPError as e:
# print(e.reason)
pass
print('完畢!')
def find_imgs(url):
'''
獲取全部的圖片鏈接
:param url: 連接地址
:return: 圖片地址的列表
'''
html = url_open(url).decode("utf-8")
img_addrs = re.findall(r'src="(.+?\.gif)', html)
return img_addrs
def get_page(url):
'''
獲取當前一共有多少頁(yè)的圖片
:param url: 網(wǎng)頁(yè)地址
:return:
'''
html = url_open(url).decode('utf-8')
a = html.find("current-comment-page") + 23
b = html.find("]", a)
return html[a:b]
def download_mm(url="http://jandan.net/ooxx/", folder="OOXX", pages=1):
'''
主程序(下載圖片)
:param folder:默認存放的文件夾
:param pages: 下載的頁(yè)數
:return:
'''
page_num = int(get_page(url))
for i in range(pages):
page_num -= i
page_url = url + "page-" + str(page_num) + "#comments"
img_addrs = find_imgs(page_url)
save_img(folder, img_addrs)
if __name__ == "__main__":
download_mm()
三、總結
因為代碼中訪(fǎng)問(wèn)的網(wǎng)址使用了反爬蟲(chóng)算法。所以無(wú)法爬取想要的圖片,所以,只做爬蟲(chóng)筆記。僅供學(xué)習參考【捂臉】。 . . .
終于:我把jpg格式改成gif了,還是能爬到一個(gè)很差的gif圖:
第一張圖片是反爬機制的圖片占位符,完全沒(méi)有內容 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載)
一、介紹
我學(xué)習 Python 已經(jīng)有一段時(shí)間了。聽(tīng)說(shuō)Python爬蟲(chóng)很厲害。我現在才學(xué)到這個(gè)。跟著(zhù)小龜的Python視頻寫(xiě)了一個(gè)爬蟲(chóng)程序,可以實(shí)現簡(jiǎn)單的網(wǎng)頁(yè)圖片下載。
二、代碼
__author__ = "JentZhang"
import urllib.request
import os
import random
import re
def url_open(url):
'''
打開(kāi)網(wǎng)頁(yè)
:param url:
:return:
'''
req = urllib.request.Request(url)
req.add_header('User-Agent',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36')
# 應用代理
'''
proxyies = ["111.155.116.237:8123","101.236.23.202:8866","122.114.31.177:808"]
proxy = random.choice(proxyies)
proxy_support = urllib.request.ProxyHandler({"http": proxy})
opener = urllib.request.build_opener(proxy_support)
urllib.request.install_opener(opener)
'''
response = urllib.request.urlopen(url)
html = response.read()
return html
def save_img(folder, img_addrs):
'''
保存圖片
:param folder: 要保存的文件夾
:param img_addrs: 圖片地址(列表)
:return:
'''
# 創(chuàng )建文件夾用來(lái)存放圖片
if not os.path.exists(folder):
os.mkdir(folder)
os.chdir(folder)
for each in img_addrs:
filename = each.split('/')[-1]
try:
with open(filename, 'wb') as f:
img = url_open("http:" + each)
f.write(img)
except urllib.error.HTTPError as e:
# print(e.reason)
pass
print('完畢!')
def find_imgs(url):
'''
獲取全部的圖片鏈接
:param url: 連接地址
:return: 圖片地址的列表
'''
html = url_open(url).decode("utf-8")
img_addrs = re.findall(r'src="(.+?\.gif)', html)
return img_addrs
def get_page(url):
'''
獲取當前一共有多少頁(yè)的圖片
:param url: 網(wǎng)頁(yè)地址
:return:
'''
html = url_open(url).decode('utf-8')
a = html.find("current-comment-page") + 23
b = html.find("]", a)
return html[a:b]
def download_mm(url="http://jandan.net/ooxx/", folder="OOXX", pages=1):
'''
主程序(下載圖片)
:param folder:默認存放的文件夾
:param pages: 下載的頁(yè)數
:return:
'''
page_num = int(get_page(url))
for i in range(pages):
page_num -= i
page_url = url + "page-" + str(page_num) + "#comments"
img_addrs = find_imgs(page_url)
save_img(folder, img_addrs)
if __name__ == "__main__":
download_mm()
三、總結
因為代碼中訪(fǎng)問(wèn)的網(wǎng)址使用了反爬蟲(chóng)算法。所以無(wú)法爬取想要的圖片,所以,只做爬蟲(chóng)筆記。僅供學(xué)習參考【捂臉】。 . . .
終于:我把jpg格式改成gif了,還是能爬到一個(gè)很差的gif圖:

第一張圖片是反爬機制的圖片占位符,完全沒(méi)有內容
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(越過(guò)亞馬遜的反爬蟲(chóng)機制,成功越過(guò)反爬機制(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 79 次瀏覽 ? 2022-03-10 04:21
事情是這樣的
亞馬遜是全球最大的購物平臺
很多產(chǎn)品信息、用戶(hù)評論等都是最豐富的。
今天就帶大家一起來(lái)穿越亞馬遜的反爬蟲(chóng)機制吧
抓取您想要的有用信息,例如產(chǎn)品、評論等
反爬蟲(chóng)機制
但是,當我們想使用爬蟲(chóng)爬取相關(guān)數據信息時(shí)
亞馬遜、TBO、京東等大型購物中心
為了保護他們的數據信息,他們都有一套完整的反爬蟲(chóng)機制。
先試試亞馬遜的反爬機制
我們使用幾個(gè)不同的python爬蟲(chóng)模塊來(lái)一步步測試
最終,防爬機制順利通過(guò)。
一、urllib 模塊
代碼顯示如下:
# -*- coding:utf-8 -*-
import urllib.request
req = urllib.request.urlopen('https://www.amazon.com')
print(req.code)
復制代碼
返回結果:狀態(tài)碼:503。
分析:亞馬遜將你的請求識別為爬蟲(chóng),拒絕提供服務(wù)。
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)
代碼如下↓ ↓ ↓
import requests
url='https://www.amazon.com/KAVU-Rope-Bag-Denim-Size/product-reviews/xxxxxxx'
web_header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Cookie': '你的cookie值',
'TE': 'Trailers'}
r = requests.get(url,headers=web_header)
print(r.status_code)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,屬于正常。它聞起來(lái)像爬蟲(chóng)。
3、查看返回頁(yè)面
通過(guò)requests+cookie的方法,我們得到的狀態(tài)碼是200
至少它目前由亞馬遜的服務(wù)器提供服務(wù)。
我們將爬取的頁(yè)面寫(xiě)入文本并在瀏覽器中打開(kāi)。
我在騎馬……返回狀態(tài)正常,但是返回了反爬蟲(chóng)驗證碼頁(yè)面。
仍然被亞馬遜屏蔽。
三、硒自動(dòng)化模塊
相關(guān)硒模塊的安裝
pip install selenium
復制代碼
在代碼中引入 selenium 并設置相關(guān)參數
import os
from requests.api import options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#selenium配置參數
options = Options()
#配置無(wú)頭參數,即不打開(kāi)瀏覽器
options.add_argument('--headless')
#配置Chrome瀏覽器的selenium驅動(dòng)
chromedriver="C:/Users/pacer/AppData/Local/Google/Chrome/Application/chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
#將參數設置+瀏覽器驅動(dòng)組合
browser = webdriver.Chrome(chromedriver,chrome_options=options)
復制代碼
測試訪(fǎng)問(wèn)
url = "https://www.amazon.com"
print(url)
#通過(guò)selenium來(lái)訪(fǎng)問(wèn)亞馬遜
browser.get(url)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,訪(fǎng)問(wèn)狀態(tài)正常。我們來(lái)看看爬取的網(wǎng)頁(yè)上的信息。
將網(wǎng)頁(yè)源代碼保存到本地
#將爬取到的網(wǎng)頁(yè)信息,寫(xiě)入到本地文件
fw=open('E:/amzon.html','w',encoding='utf-8')
fw.write(str(browser.page_source))
browser.close()
fw.close()
復制代碼
打開(kāi)我們爬取的本地文件查看,
我們已經(jīng)成功繞過(guò)反爬機制,進(jìn)入亞馬遜首頁(yè)
結尾
通過(guò)selenium模塊,我們可以成功穿越
亞馬遜的反爬蟲(chóng)機制。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(越過(guò)亞馬遜的反爬蟲(chóng)機制,成功越過(guò)反爬機制(組圖))
事情是這樣的
亞馬遜是全球最大的購物平臺
很多產(chǎn)品信息、用戶(hù)評論等都是最豐富的。
今天就帶大家一起來(lái)穿越亞馬遜的反爬蟲(chóng)機制吧
抓取您想要的有用信息,例如產(chǎn)品、評論等

反爬蟲(chóng)機制
但是,當我們想使用爬蟲(chóng)爬取相關(guān)數據信息時(shí)
亞馬遜、TBO、京東等大型購物中心
為了保護他們的數據信息,他們都有一套完整的反爬蟲(chóng)機制。
先試試亞馬遜的反爬機制
我們使用幾個(gè)不同的python爬蟲(chóng)模塊來(lái)一步步測試
最終,防爬機制順利通過(guò)。
一、urllib 模塊
代碼顯示如下:
# -*- coding:utf-8 -*-
import urllib.request
req = urllib.request.urlopen('https://www.amazon.com')
print(req.code)
復制代碼
返回結果:狀態(tài)碼:503。
分析:亞馬遜將你的請求識別為爬蟲(chóng),拒絕提供服務(wù)。

以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200

分析:正常訪(fǎng)問(wèn)
以科學(xué)嚴謹的態(tài)度,來(lái)試試千人之首的百度吧。
返回結果:狀態(tài)碼200
分析:正常訪(fǎng)問(wèn)

代碼如下↓ ↓ ↓
import requests
url='https://www.amazon.com/KAVU-Rope-Bag-Denim-Size/product-reviews/xxxxxxx'
web_header={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Cookie': '你的cookie值',
'TE': 'Trailers'}
r = requests.get(url,headers=web_header)
print(r.status_code)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,屬于正常。它聞起來(lái)像爬蟲(chóng)。
3、查看返回頁(yè)面
通過(guò)requests+cookie的方法,我們得到的狀態(tài)碼是200
至少它目前由亞馬遜的服務(wù)器提供服務(wù)。
我們將爬取的頁(yè)面寫(xiě)入文本并在瀏覽器中打開(kāi)。

我在騎馬……返回狀態(tài)正常,但是返回了反爬蟲(chóng)驗證碼頁(yè)面。
仍然被亞馬遜屏蔽。
三、硒自動(dòng)化模塊
相關(guān)硒模塊的安裝
pip install selenium
復制代碼
在代碼中引入 selenium 并設置相關(guān)參數
import os
from requests.api import options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#selenium配置參數
options = Options()
#配置無(wú)頭參數,即不打開(kāi)瀏覽器
options.add_argument('--headless')
#配置Chrome瀏覽器的selenium驅動(dòng)
chromedriver="C:/Users/pacer/AppData/Local/Google/Chrome/Application/chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
#將參數設置+瀏覽器驅動(dòng)組合
browser = webdriver.Chrome(chromedriver,chrome_options=options)
復制代碼
測試訪(fǎng)問(wèn)
url = "https://www.amazon.com"
print(url)
#通過(guò)selenium來(lái)訪(fǎng)問(wèn)亞馬遜
browser.get(url)
復制代碼
返回結果:狀態(tài)碼:200
分析:返回狀態(tài)碼為200,訪(fǎng)問(wèn)狀態(tài)正常。我們來(lái)看看爬取的網(wǎng)頁(yè)上的信息。
將網(wǎng)頁(yè)源代碼保存到本地
#將爬取到的網(wǎng)頁(yè)信息,寫(xiě)入到本地文件
fw=open('E:/amzon.html','w',encoding='utf-8')
fw.write(str(browser.page_source))
browser.close()
fw.close()
復制代碼
打開(kāi)我們爬取的本地文件查看,
我們已經(jīng)成功繞過(guò)反爬機制,進(jìn)入亞馬遜首頁(yè)

結尾
通過(guò)selenium模塊,我們可以成功穿越
亞馬遜的反爬蟲(chóng)機制。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)技術(shù)(Webcrawler)的工作流程及注意事項)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-03-09 15:11
網(wǎng)絡(luò )爬蟲(chóng)技術(shù)
網(wǎng)絡(luò )爬蟲(chóng)是根據一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。它們被廣泛應用于互聯(lián)網(wǎng)搜索引擎或其他類(lèi)似的網(wǎng)站,并且可以自動(dòng)采集所有它可以訪(fǎng)問(wèn)的頁(yè)面的內容來(lái)獲取或更新這些網(wǎng)站的內容和檢索方式. 從功能上來(lái)說(shuō),爬蟲(chóng)一般分為數據采集、處理、存儲三部分。
傳統爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。
焦點(diǎn)爬蟲(chóng)的工作流程比較復雜。它需要按照一定的網(wǎng)頁(yè)分析算法過(guò)濾掉與主題無(wú)關(guān)的鏈接,保留有用的鏈接,并放入等待抓取的URL隊列中。然后,它會(huì )根據一定的搜索策略從隊列中選擇下一個(gè)要爬取的網(wǎng)頁(yè)URL,并重復上述過(guò)程,直到達到系統的一定條件并停止。此外,爬蟲(chóng)爬取的所有網(wǎng)頁(yè)都會(huì )被系統存儲,經(jīng)過(guò)一定的分析、過(guò)濾、索引,以供后續查詢(xún)和檢索;對于重點(diǎn)爬蟲(chóng)來(lái)說(shuō),這個(gè)過(guò)程中得到的分析結果也可能對后續的爬取過(guò)程給出反饋和指導。
反爬蟲(chóng)技術(shù)
由于搜索引擎的普及,網(wǎng)絡(luò )爬蟲(chóng)已經(jīng)成為一種非常流行的網(wǎng)絡(luò )技術(shù)。除了專(zhuān)注于搜索的谷歌、雅虎、微軟和百度之外,幾乎每個(gè)大型門(mén)戶(hù)網(wǎng)站網(wǎng)站都有自己的搜索引擎,大大小小的??梢越械拿钟袔资N,不知道的種類(lèi)有上萬(wàn)種。對于一個(gè)內容驅動(dòng)的網(wǎng)站,難免會(huì )被網(wǎng)絡(luò )爬蟲(chóng)光顧。
一些智能搜索引擎爬蟲(chóng)的爬取頻率比較合理,資源消耗也比較小,但是很多不良網(wǎng)絡(luò )爬蟲(chóng)對網(wǎng)頁(yè)的爬取能力很差,經(jīng)常循環(huán)重復上百個(gè)請求。拿,這種爬蟲(chóng)對中小型網(wǎng)站來(lái)說(shuō)往往是毀滅性的打擊,尤其是一些缺乏爬蟲(chóng)編寫(xiě)經(jīng)驗的程序員編寫(xiě)的爬蟲(chóng),破壞性極大,導致網(wǎng)站訪(fǎng)問(wèn)壓力會(huì )很大非常大,這將導致 網(wǎng)站 訪(fǎng)問(wèn)緩慢甚至無(wú)法訪(fǎng)問(wèn)。
一般網(wǎng)站反爬蟲(chóng)從三個(gè)方面:用戶(hù)請求的頭文件、用戶(hù)行為、網(wǎng)站目錄和數據加載方式。前兩種比較容易遇到,從這些角度來(lái)看,大部分網(wǎng)站都是反爬蟲(chóng)。會(huì )使用第三種使用ajax的網(wǎng)站,增加了爬取的難度。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)絡(luò )爬蟲(chóng)技術(shù)(Webcrawler)的工作流程及注意事項)
網(wǎng)絡(luò )爬蟲(chóng)技術(shù)
網(wǎng)絡(luò )爬蟲(chóng)是根據一定的規則自動(dòng)從萬(wàn)維網(wǎng)上爬取信息的程序或腳本。它們被廣泛應用于互聯(lián)網(wǎng)搜索引擎或其他類(lèi)似的網(wǎng)站,并且可以自動(dòng)采集所有它可以訪(fǎng)問(wèn)的頁(yè)面的內容來(lái)獲取或更新這些網(wǎng)站的內容和檢索方式. 從功能上來(lái)說(shuō),爬蟲(chóng)一般分為數據采集、處理、存儲三部分。
傳統爬蟲(chóng)從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL開(kāi)始,獲取初始網(wǎng)頁(yè)上的URL。在抓取網(wǎng)頁(yè)的過(guò)程中,它不斷地從當前頁(yè)面中提取新的 URL 并放入隊列中,直到滿(mǎn)足系統的某些停止條件。
焦點(diǎn)爬蟲(chóng)的工作流程比較復雜。它需要按照一定的網(wǎng)頁(yè)分析算法過(guò)濾掉與主題無(wú)關(guān)的鏈接,保留有用的鏈接,并放入等待抓取的URL隊列中。然后,它會(huì )根據一定的搜索策略從隊列中選擇下一個(gè)要爬取的網(wǎng)頁(yè)URL,并重復上述過(guò)程,直到達到系統的一定條件并停止。此外,爬蟲(chóng)爬取的所有網(wǎng)頁(yè)都會(huì )被系統存儲,經(jīng)過(guò)一定的分析、過(guò)濾、索引,以供后續查詢(xún)和檢索;對于重點(diǎn)爬蟲(chóng)來(lái)說(shuō),這個(gè)過(guò)程中得到的分析結果也可能對后續的爬取過(guò)程給出反饋和指導。

反爬蟲(chóng)技術(shù)
由于搜索引擎的普及,網(wǎng)絡(luò )爬蟲(chóng)已經(jīng)成為一種非常流行的網(wǎng)絡(luò )技術(shù)。除了專(zhuān)注于搜索的谷歌、雅虎、微軟和百度之外,幾乎每個(gè)大型門(mén)戶(hù)網(wǎng)站網(wǎng)站都有自己的搜索引擎,大大小小的??梢越械拿钟袔资N,不知道的種類(lèi)有上萬(wàn)種。對于一個(gè)內容驅動(dòng)的網(wǎng)站,難免會(huì )被網(wǎng)絡(luò )爬蟲(chóng)光顧。
一些智能搜索引擎爬蟲(chóng)的爬取頻率比較合理,資源消耗也比較小,但是很多不良網(wǎng)絡(luò )爬蟲(chóng)對網(wǎng)頁(yè)的爬取能力很差,經(jīng)常循環(huán)重復上百個(gè)請求。拿,這種爬蟲(chóng)對中小型網(wǎng)站來(lái)說(shuō)往往是毀滅性的打擊,尤其是一些缺乏爬蟲(chóng)編寫(xiě)經(jīng)驗的程序員編寫(xiě)的爬蟲(chóng),破壞性極大,導致網(wǎng)站訪(fǎng)問(wèn)壓力會(huì )很大非常大,這將導致 網(wǎng)站 訪(fǎng)問(wèn)緩慢甚至無(wú)法訪(fǎng)問(wèn)。
一般網(wǎng)站反爬蟲(chóng)從三個(gè)方面:用戶(hù)請求的頭文件、用戶(hù)行為、網(wǎng)站目錄和數據加載方式。前兩種比較容易遇到,從這些角度來(lái)看,大部分網(wǎng)站都是反爬蟲(chóng)。會(huì )使用第三種使用ajax的網(wǎng)站,增加了爬取的難度。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片( 爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 66 次瀏覽 ? 2022-03-07 10:07
爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
測試爬取百度貼吧圖片
定義爬取百度斗圖首頁(yè)每篇文章URL的爬取規則對象
1 /**
2 * 斗圖吧貼子的url
3 */
4 SpiderFunction doutubaTieZiUrl = spider -> {
5 // 文本爬取對象
6 TextSpider textSpider = (TextSpider) spider;
7 // 文本爬取規則 定位元素
8 textSpider.setReg("div:t_concleafix>*>a>href>*");
9 return textSpider.getData().getResult().stream()
10 // 爬取后的數據處理 因為可能存在相同引用的連接所以使用Set容器去重
11 .filter(url -> (!"#".equals(url)) && (!url.contains("?")) && (url.contains("/p/")))
12 .map(url -> url.startsWith("http") ? url : "https://tieba.baidu.com" + url
13 ).collect(Collectors.toSet());
14 };
15
16
在搜索爬蟲(chóng)規則的過(guò)程中,發(fā)現百度貼吧帖子列表頁(yè)面的所有內容都被注釋掉了,所以需要修改文字規則攔截部分的代碼
過(guò)濾評論部分需要處理
編寫(xiě)一個(gè)爬取規則對象,爬取每篇文章的頁(yè)數
1 /**
2 * 百度貼吧貼子的每頁(yè)的url
3 */
4 SpiderFunction doutubaTieZiPageUrl = spider -> {
5 Set urls = new HashSet();
6 String page = spider.getUrl();
7 TextSpider textSpider = (TextSpider) spider;
8 // 定位總頁(yè)數位置
9 textSpider.setReg("li:l_reply_num>1>span>2");
10 List result = textSpider.getData().getResult();
11 // 循環(huán)生成某個(gè)貼子的所有頁(yè)面的url
12 if (Lists.isValuable(result)) {
13 String endNum = result.get(0);
14 if (endNum.matches("^[0-9]+$")) {
15 for (int i = 1; i {
5 TextSpider textSpider = (TextSpider) spider;
6 textSpider.setReg("div:p_content>*>img>src>*");
7 return textSpider.getData().getResult().stream()
8 .map(url -> url.startsWith("http") ? url : spider.getUrl() + url)
9 .filter(SpiderCommonUtils::isImgUrl)
10 .collect(Collectors.toSet());
11 };
12
13
獲取豆瓣的代碼
1 /**
2 * 抓取斗圖吧圖片
3 */
4 @Test
5 public void testP(){
6 //String doutu = "https://tieba.baidu.com/f%3Fkw ... 3B%3B
7 for (int i = 0; i {
56 if (jsonMap.containsKey(tag)) {
57 result.addAll(getDataList(jsonMap.get(tag).toString(),endTag));
58 }
59 });
60 }
61 }else{
62 JSON json = JSONUtil.parse(source);
63 if (json instanceof JSONObject) {
64 if (((JSONObject) json).containsKey(reg)) {
65 result.add(((JSONObject) json).get(reg).toString());
66 }
67 } else if (json instanceof JSONArray) {
68 ((JSONArray) json).toList(Map.class).stream().forEach(jsonMap -> {
69 if (jsonMap.containsKey(reg)) {
70 result.add(jsonMap.get(reg).toString());
71 }
72 });
73 }
74 }
75 return result;
76 }
77}
78
79
編寫(xiě)爬取規則對象
1 /**
2 * 百度搜圖的圖片url
3 */
4 SpiderFunction baiDuSouImgUrl = spider -> {
5 AjaxSpider ajaxSpider = (AjaxSpider) spider;
6 return ajaxSpider.getData().getDataList("data.hoverURL");
7 };
8
9
爬取代碼
<p>1 /**
2 * 抓取百度圖片搜索
3 */
4 @Test
5 public void testPt(){
6 String image = "https://image.baidu.com/search/acjson?";
7 //搜索的關(guān)鍵字
8 String queryWords = "米老鼠";
9 // 參數
10 Map parms = new HashMap();
11 parms.put("tn", "resultjson_com");
12 parms.put("ipn", "rj");
13 parms.put("ct", "201326592");
14 parms.put("is", "");
15 parms.put("fp", "result");
16 parms.put("queryWord", queryWords);
17 parms.put("cl", "2");
18 parms.put("lm", "-1");
19 parms.put("ie", "utf-8");
20 parms.put("oe", "utf-8");
21 parms.put("adpicid", "");
22 parms.put("st", "-1");
23 parms.put("z", "");
24 parms.put("ic", "0");
25 parms.put("hd", "");
26 parms.put("latest", "");
27 parms.put("copyright", "");
28 parms.put("word", queryWords);
29 parms.put("s", "");
30 parms.put("se", "");
31 parms.put("tab", "");
32 parms.put("width", "");
33 parms.put("height", "");
34 parms.put("face", "0");
35 parms.put("istype", "2");
36 parms.put("qc", "");
37 parms.put("nc", "1");
38 parms.put("fr", "");
39 parms.put("expermode", "");
40 parms.put("rn", "30");
41 parms.put("gsm", "");
42 parms.put(String.valueOf(System.currentTimeMillis()),"");
43 for (int i = 0; i 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(
爬取百度貼吧了百度你還真是雞賊鼠標向下滾動(dòng))
測試爬取百度貼吧圖片
定義爬取百度斗圖首頁(yè)每篇文章URL的爬取規則對象
1 /**
2 * 斗圖吧貼子的url
3 */
4 SpiderFunction doutubaTieZiUrl = spider -> {
5 // 文本爬取對象
6 TextSpider textSpider = (TextSpider) spider;
7 // 文本爬取規則 定位元素
8 textSpider.setReg("div:t_concleafix>*>a>href>*");
9 return textSpider.getData().getResult().stream()
10 // 爬取后的數據處理 因為可能存在相同引用的連接所以使用Set容器去重
11 .filter(url -> (!"#".equals(url)) && (!url.contains("?")) && (url.contains("/p/")))
12 .map(url -> url.startsWith("http") ? url : "https://tieba.baidu.com" + url
13 ).collect(Collectors.toSet());
14 };
15
16
在搜索爬蟲(chóng)規則的過(guò)程中,發(fā)現百度貼吧帖子列表頁(yè)面的所有內容都被注釋掉了,所以需要修改文字規則攔截部分的代碼

過(guò)濾評論部分需要處理
編寫(xiě)一個(gè)爬取規則對象,爬取每篇文章的頁(yè)數
1 /**
2 * 百度貼吧貼子的每頁(yè)的url
3 */
4 SpiderFunction doutubaTieZiPageUrl = spider -> {
5 Set urls = new HashSet();
6 String page = spider.getUrl();
7 TextSpider textSpider = (TextSpider) spider;
8 // 定位總頁(yè)數位置
9 textSpider.setReg("li:l_reply_num>1>span>2");
10 List result = textSpider.getData().getResult();
11 // 循環(huán)生成某個(gè)貼子的所有頁(yè)面的url
12 if (Lists.isValuable(result)) {
13 String endNum = result.get(0);
14 if (endNum.matches("^[0-9]+$")) {
15 for (int i = 1; i {
5 TextSpider textSpider = (TextSpider) spider;
6 textSpider.setReg("div:p_content>*>img>src>*");
7 return textSpider.getData().getResult().stream()
8 .map(url -> url.startsWith("http") ? url : spider.getUrl() + url)
9 .filter(SpiderCommonUtils::isImgUrl)
10 .collect(Collectors.toSet());
11 };
12
13
獲取豆瓣的代碼
1 /**
2 * 抓取斗圖吧圖片
3 */
4 @Test
5 public void testP(){
6 //String doutu = "https://tieba.baidu.com/f%3Fkw ... 3B%3B
7 for (int i = 0; i {
56 if (jsonMap.containsKey(tag)) {
57 result.addAll(getDataList(jsonMap.get(tag).toString(),endTag));
58 }
59 });
60 }
61 }else{
62 JSON json = JSONUtil.parse(source);
63 if (json instanceof JSONObject) {
64 if (((JSONObject) json).containsKey(reg)) {
65 result.add(((JSONObject) json).get(reg).toString());
66 }
67 } else if (json instanceof JSONArray) {
68 ((JSONArray) json).toList(Map.class).stream().forEach(jsonMap -> {
69 if (jsonMap.containsKey(reg)) {
70 result.add(jsonMap.get(reg).toString());
71 }
72 });
73 }
74 }
75 return result;
76 }
77}
78
79
編寫(xiě)爬取規則對象
1 /**
2 * 百度搜圖的圖片url
3 */
4 SpiderFunction baiDuSouImgUrl = spider -> {
5 AjaxSpider ajaxSpider = (AjaxSpider) spider;
6 return ajaxSpider.getData().getDataList("data.hoverURL");
7 };
8
9
爬取代碼
<p>1 /**
2 * 抓取百度圖片搜索
3 */
4 @Test
5 public void testPt(){
6 String image = "https://image.baidu.com/search/acjson?";
7 //搜索的關(guān)鍵字
8 String queryWords = "米老鼠";
9 // 參數
10 Map parms = new HashMap();
11 parms.put("tn", "resultjson_com");
12 parms.put("ipn", "rj");
13 parms.put("ct", "201326592");
14 parms.put("is", "");
15 parms.put("fp", "result");
16 parms.put("queryWord", queryWords);
17 parms.put("cl", "2");
18 parms.put("lm", "-1");
19 parms.put("ie", "utf-8");
20 parms.put("oe", "utf-8");
21 parms.put("adpicid", "");
22 parms.put("st", "-1");
23 parms.put("z", "");
24 parms.put("ic", "0");
25 parms.put("hd", "");
26 parms.put("latest", "");
27 parms.put("copyright", "");
28 parms.put("word", queryWords);
29 parms.put("s", "");
30 parms.put("se", "");
31 parms.put("tab", "");
32 parms.put("width", "");
33 parms.put("height", "");
34 parms.put("face", "0");
35 parms.put("istype", "2");
36 parms.put("qc", "");
37 parms.put("nc", "1");
38 parms.put("fr", "");
39 parms.put("expermode", "");
40 parms.put("rn", "30");
41 parms.put("gsm", "");
42 parms.put(String.valueOf(System.currentTimeMillis()),"");
43 for (int i = 0; i
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)抓取csdn博客+C和Ctrl+V)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-03-06 06:12
Python爬蟲(chóng)csdn博客
昨晚為了把某csdn大佬的博文全部下載保存,寫(xiě)了一個(gè)爬蟲(chóng)自動(dòng)抓取文章保存為txt文本,當然也可以保存為html網(wǎng)頁(yè)。這樣Ctrl+C和Ctrl+V都可以用,很方便,抓取其他網(wǎng)站也差不多。
為了解析爬取的網(wǎng)頁(yè),使用了第三方模塊BeautifulSoup。這個(gè)模塊對于解析 html 文件非常有用。當然也可以使用正則表達式自己解析,但是比較麻煩。
由于csdn網(wǎng)站的robots.txt文件顯示禁止任何爬蟲(chóng),所以爬蟲(chóng)必須偽裝成瀏覽器,不能頻繁爬取。如果他們睡一會(huì )兒,他們就會(huì )被封鎖。 ,但可以使用代理ip。
<p>#-*-?encoding:?utf-8?-*-
'''
Created?on?2014-09-18?21:10:39
@author:?Mangoer
@email:?2395528746@qq.com
'''
import?urllib2
import?re
from?bs4?import?BeautifulSoup
import?random
import?time
class?CSDN_Blog_Spider:
?????def?__init__(self,url):
??????????print?'\n'
??????????print('已啟動(dòng)網(wǎng)絡(luò )爬蟲(chóng)。。。')
??????????print??'網(wǎng)頁(yè)地址:?'?+?url
??????????user_agents?=?[
????????????????????'Mozilla/5.0?(Windows;?U;?Windows?NT?5.1;?it;?rv:1.8.1.11)?Gecko/20071127?Firefox/2.0.0.11',
????????????????????'Opera/9.25?(Windows?NT?5.1;?U;?en)',
????????????????????'Mozilla/4.0?(compatible;?MSIE?6.0;?Windows?NT?5.1;?SV1;?.NET?CLR?1.1.4322;?.NET?CLR?2.0.50727)',
????????????????????'Mozilla/5.0?(compatible;?Konqueror/3.5;?Linux)?KHTML/3.5.5?(like?Gecko)?(Kubuntu)',
????????????????????'Mozilla/5.0?(X11;?U;?Linux?i686;?en-US;?rv:1.8.0.12)?Gecko/20070731?Ubuntu/dapper-security?Firefox/1.5.0.12',
????????????????????'Lynx/2.8.5rel.1?libwww-FM/2.14?SSL-MM/1.4.1?GNUTLS/1.2.9',
????????????????????"Mozilla/5.0?(X11;?Linux?i686)?AppleWebKit/535.7?(KHTML,?like?Gecko)?Ubuntu/11.04?Chromium/16.0.912.77?Chrome/16.0.912.77?Safari/535.7",
????????????????????"Mozilla/5.0?(X11;?Ubuntu;?Linux?i686;?rv:10.0)?Gecko/20100101?Firefox/10.0?",
???????????????????]
??????????#?use?proxy?ip?
??????????#?ips_list?=?['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118',
??????????#???????????'1.50.235.82:80','203.80.144.4:80']
??????????#?ip?=?random.choice(ips_list)
??????????#?print?'使用的代理ip地址:?'?+?ip
??????????#?proxy_support?=?urllib2.ProxyHandler({'http':'http://'+ip})
??????????#?opener?=?urllib2.build_opener(proxy_support)
??????????#?urllib2.install_opener(opener)
??????????agent?=?random.choice(user_agents)
??????????req?=?urllib2.Request(url)
??????????req.add_header('User-Agent',agent)
??????????req.add_header('Host','blog.csdn.net')
??????????req.add_header('Accept','*/*')
??????????req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list')
??????????req.add_header('GET',url)
??????????html?=?urllib2.urlopen(req)
??????????page?=?html.read().decode('gbk','ignore').encode('utf-8')
??????????self.page?=?page
??????????self.title?=?self.getTitle()
??????????self.content?=?self.getContent()
??????????self.saveFile()
??????????
?????def?printInfo(self):
??????????print('文章標題是:???'+self.title?+?'\n')?????????
??????????print('內容已經(jīng)存儲到out.txt文件中!')
?????def?getTitle(self):
??????????rex?=?re.compile('(.*?)',re.DOTALL)??????????
??????????match?=?rex.search(self.page)
??????????if?match:
????????????????return?match.group(1)
??????????return?'NO?TITLE'
?????def?getContent(self):
??????????bs?=?BeautifulSoup(self.page)
??????????html_content_list?=?bs.findAll('div',{'id':'article_content','class':'article_content'})
??????????html_content?=?str(html_content_list[0])
??????????rex_p?=?re.compile(r'(?:.*?)>(.*?) 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Python爬蟲(chóng)抓取csdn博客+C和Ctrl+V)
Python爬蟲(chóng)csdn博客
昨晚為了把某csdn大佬的博文全部下載保存,寫(xiě)了一個(gè)爬蟲(chóng)自動(dòng)抓取文章保存為txt文本,當然也可以保存為html網(wǎng)頁(yè)。這樣Ctrl+C和Ctrl+V都可以用,很方便,抓取其他網(wǎng)站也差不多。
為了解析爬取的網(wǎng)頁(yè),使用了第三方模塊BeautifulSoup。這個(gè)模塊對于解析 html 文件非常有用。當然也可以使用正則表達式自己解析,但是比較麻煩。
由于csdn網(wǎng)站的robots.txt文件顯示禁止任何爬蟲(chóng),所以爬蟲(chóng)必須偽裝成瀏覽器,不能頻繁爬取。如果他們睡一會(huì )兒,他們就會(huì )被封鎖。 ,但可以使用代理ip。
<p>#-*-?encoding:?utf-8?-*-
'''
Created?on?2014-09-18?21:10:39
@author:?Mangoer
@email:?2395528746@qq.com
'''
import?urllib2
import?re
from?bs4?import?BeautifulSoup
import?random
import?time
class?CSDN_Blog_Spider:
?????def?__init__(self,url):
??????????print?'\n'
??????????print('已啟動(dòng)網(wǎng)絡(luò )爬蟲(chóng)。。。')
??????????print??'網(wǎng)頁(yè)地址:?'?+?url
??????????user_agents?=?[
????????????????????'Mozilla/5.0?(Windows;?U;?Windows?NT?5.1;?it;?rv:1.8.1.11)?Gecko/20071127?Firefox/2.0.0.11',
????????????????????'Opera/9.25?(Windows?NT?5.1;?U;?en)',
????????????????????'Mozilla/4.0?(compatible;?MSIE?6.0;?Windows?NT?5.1;?SV1;?.NET?CLR?1.1.4322;?.NET?CLR?2.0.50727)',
????????????????????'Mozilla/5.0?(compatible;?Konqueror/3.5;?Linux)?KHTML/3.5.5?(like?Gecko)?(Kubuntu)',
????????????????????'Mozilla/5.0?(X11;?U;?Linux?i686;?en-US;?rv:1.8.0.12)?Gecko/20070731?Ubuntu/dapper-security?Firefox/1.5.0.12',
????????????????????'Lynx/2.8.5rel.1?libwww-FM/2.14?SSL-MM/1.4.1?GNUTLS/1.2.9',
????????????????????"Mozilla/5.0?(X11;?Linux?i686)?AppleWebKit/535.7?(KHTML,?like?Gecko)?Ubuntu/11.04?Chromium/16.0.912.77?Chrome/16.0.912.77?Safari/535.7",
????????????????????"Mozilla/5.0?(X11;?Ubuntu;?Linux?i686;?rv:10.0)?Gecko/20100101?Firefox/10.0?",
???????????????????]
??????????#?use?proxy?ip?
??????????#?ips_list?=?['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118',
??????????#???????????'1.50.235.82:80','203.80.144.4:80']
??????????#?ip?=?random.choice(ips_list)
??????????#?print?'使用的代理ip地址:?'?+?ip
??????????#?proxy_support?=?urllib2.ProxyHandler({'http':'http://'+ip})
??????????#?opener?=?urllib2.build_opener(proxy_support)
??????????#?urllib2.install_opener(opener)
??????????agent?=?random.choice(user_agents)
??????????req?=?urllib2.Request(url)
??????????req.add_header('User-Agent',agent)
??????????req.add_header('Host','blog.csdn.net')
??????????req.add_header('Accept','*/*')
??????????req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list')
??????????req.add_header('GET',url)
??????????html?=?urllib2.urlopen(req)
??????????page?=?html.read().decode('gbk','ignore').encode('utf-8')
??????????self.page?=?page
??????????self.title?=?self.getTitle()
??????????self.content?=?self.getContent()
??????????self.saveFile()
??????????
?????def?printInfo(self):
??????????print('文章標題是:???'+self.title?+?'\n')?????????
??????????print('內容已經(jīng)存儲到out.txt文件中!')
?????def?getTitle(self):
??????????rex?=?re.compile('(.*?)',re.DOTALL)??????????
??????????match?=?rex.search(self.page)
??????????if?match:
????????????????return?match.group(1)
??????????return?'NO?TITLE'
?????def?getContent(self):
??????????bs?=?BeautifulSoup(self.page)
??????????html_content_list?=?bs.findAll('div',{'id':'article_content','class':'article_content'})
??????????html_content?=?str(html_content_list[0])
??????????rex_p?=?re.compile(r'(?:.*?)>(.*?)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(簡(jiǎn)要的實(shí)現Python爬蟲(chóng)爬取百度貼吧頁(yè)面上的圖片)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 104 次瀏覽 ? 2022-03-05 22:07
Python爬蟲(chóng)爬取百度貼吧頁(yè)面圖片的簡(jiǎn)單實(shí)現,下面這個(gè)網(wǎng)頁(yè)就是本博客要爬取的網(wǎng)頁(yè),當然你看到的只是圖片的一部分,也就是要爬取的頁(yè)面被爬行,
下圖是最終爬取的圖片:
接下來(lái)簡(jiǎn)單說(shuō)一下爬取的全過(guò)程:
首先,你需要一個(gè)好的編程工具。博主使用的是他們覺(jué)得更容易使用的 Pycharm 工具。這是Pycharm官網(wǎng)下載的下載地址。您可以根據自己的電腦配置下載。是的,網(wǎng)上還有很多,可以參考。
下一步是編寫(xiě)爬蟲(chóng)代碼。先不說(shuō)代碼:
<p>import urllib.request
import re
import os
''' 這是需要引入的三個(gè)文件包 '''
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'mozilla/5.0 (windows nt 6.3; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36')
'''User_Ahent是爬蟲(chóng)所需要模擬瀏覽器訪(fǎng)問(wèn)所需要的一些標識信息,如瀏覽器類(lèi)型,操作系統等'''
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html):
p = r' 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(簡(jiǎn)要的實(shí)現Python爬蟲(chóng)爬取百度貼吧頁(yè)面上的圖片)
Python爬蟲(chóng)爬取百度貼吧頁(yè)面圖片的簡(jiǎn)單實(shí)現,下面這個(gè)網(wǎng)頁(yè)就是本博客要爬取的網(wǎng)頁(yè),當然你看到的只是圖片的一部分,也就是要爬取的頁(yè)面被爬行,
下圖是最終爬取的圖片:
接下來(lái)簡(jiǎn)單說(shuō)一下爬取的全過(guò)程:
首先,你需要一個(gè)好的編程工具。博主使用的是他們覺(jué)得更容易使用的 Pycharm 工具。這是Pycharm官網(wǎng)下載的下載地址。您可以根據自己的電腦配置下載。是的,網(wǎng)上還有很多,可以參考。
下一步是編寫(xiě)爬蟲(chóng)代碼。先不說(shuō)代碼:
<p>import urllib.request
import re
import os
''' 這是需要引入的三個(gè)文件包 '''
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'mozilla/5.0 (windows nt 6.3; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36')
'''User_Ahent是爬蟲(chóng)所需要模擬瀏覽器訪(fǎng)問(wèn)所需要的一些標識信息,如瀏覽器類(lèi)型,操作系統等'''
page = urllib.request.urlopen(req)
html = page.read().decode('utf-8')
return html
def get_img(html):
p = r'
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(【干貨】網(wǎng)頁(yè)的壁紙都爬取了,你知道嗎?)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 64 次瀏覽 ? 2022-03-05 04:12
前言
我想每個(gè)人都更喜歡漂亮的照片!不要隱瞞任何事情,每個(gè)人都知道對美麗的熱愛(ài)。小編最近也比較無(wú)聊,就去爬壁紙、圖片等。所以我添加了一些代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)的所有壁紙。
目錄 1:概述
在電腦上,創(chuàng )建一個(gè)文件夾,用來(lái)存放爬到對方桌面的圖片
這個(gè)文件夾下有25個(gè)文件夾,對應分類(lèi)
每個(gè)分類(lèi)文件夾下有幾個(gè)文件夾,對應頁(yè)碼
在頁(yè)碼文件夾下,存放圖片文件
目錄二:環(huán)境準備
在終端中分別輸入以下 pip 命令進(jìn)行安裝
python -m pip install beautifulsoup4
python -m pip install lxml
python -m pip install requests
內容三:分析頁(yè)面結構
4k類(lèi)別下的壁紙是網(wǎng)站收入的重要資源,我們對4k壁紙有需求,所以不抓取
我用審美類(lèi)下的壁紙來(lái)講解下如何爬取圖片
1.一共73頁(yè),除了最后一頁(yè),每頁(yè)18張圖片
但是在代碼中,我們最好需要自動(dòng)獲取總頁(yè)碼,嗯,對方桌面壁紙網(wǎng)站的結構真的很舒服,基本上每個(gè)頁(yè)碼的html結構都差不多
CSS選擇器:div.page a,定位到包裹頁(yè)數的a標簽,只有6個(gè)
并且每頁(yè)第三張圖片是同一個(gè)廣告,需要在代碼中過(guò)濾掉
每個(gè)分頁(yè)的超鏈接清晰:/weimei/index_x.htm
x 正是頁(yè)面的頁(yè)碼
注意:您在類(lèi)別下看到的圖片是低分辨率的縮略圖;要得到分辨率為1920×1080的圖片,需要進(jìn)行兩次跳轉
下圖是一個(gè)例子
在分類(lèi)頁(yè)面中,我們可以直接獲取圖片的url,但遺憾的是,它的分辨率并不理想;
通過(guò)檢查,很明顯類(lèi)別頁(yè)面中顯示的每個(gè)圖像都指向另一個(gè)超鏈接
CSS選擇器:div#main div.list ul li a,定位到包裹圖片的a標簽
點(diǎn)擊圖片,第一次跳轉,跳轉到新鏈接,頁(yè)面顯示如下內容:
CSS選擇器:div#main div.endpage div.pic div.pic-down a,找到包裹圖片的a標簽
點(diǎn)擊按鈕下載壁紙(1920×1080),第二次跳轉,轉向新鏈接,最終達到目的,鏈接中顯示的圖片分辨率為1920×1080
幾經(jīng)周折,終于為我找到了圖片的1920×1080高清圖
CSS選擇器:div#main table a img,定位圖片的img標簽
經(jīng)過(guò)我自己的爬蟲(chóng)檢查,很少有圖片因為很多碎片問(wèn)題而無(wú)法下載,還有少數圖片是因為網(wǎng)站雖然提供了1920×1080分辨率的下載按鈕,但還是給了其他決議。
目錄4:代碼分析
第一步:設置全局變量
index = 'http://www.netbian.com' # 網(wǎng)站根地址
interval = 10 # 爬取圖片的間隔時(shí)間
firstDir = 'D:/zgh/Pictures/netbian' # 總路徑
classificationDict = {} # 存放網(wǎng)站分類(lèi)子頁(yè)面的信息
第二步:獲取頁(yè)面過(guò)濾后的內容列表
def screen(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers()) # 隨機獲取一個(gè)headers
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)
第三步:獲取所有類(lèi)別的 URL
# 將分類(lèi)子頁(yè)面信息存放在字典中
def init_classification():
url = index
select = '#header > div.head > ul > li:nth-child(1) > div > a'
classifications = screen(url, select)
for c in classifications:
href = c.get('href') # 獲取的是相對地址
text = c.string # 獲取分類(lèi)名
if(text == '4k壁紙'): # 4k壁紙,因權限問(wèn)題無(wú)法爬取,直接跳過(guò)
continue
secondDir = firstDir + '/' + text # 分類(lèi)目錄
url = index + href # 分類(lèi)子頁(yè)面url
global classificationDict
classificationDict[text] = {
'path': secondDir,
'url': url
}
在接下來(lái)的代碼中,我將使用審美類(lèi)別下的壁紙來(lái)講解如何通過(guò)兩次跳轉鏈接爬取高清圖片
第四步:獲取分類(lèi)頁(yè)面下所有頁(yè)面的url
大多數類(lèi)別的分頁(yè)大于等于6頁(yè),可以直接使用上面定義的screen函數,select定義為div.page a,然后screen函數返回的列表中的第六個(gè)元素可以得到最后一個(gè)我們需要的頁(yè)碼
但是,有些類(lèi)別的頁(yè)數少于 6 頁(yè),例如:
您需要重寫(xiě)一個(gè)過(guò)濾器函數以通過(guò)兄弟元素獲取它
# 獲取頁(yè)碼
def screenPage(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers())
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)[0].next_sibling.text
獲取分類(lèi)頁(yè)面下所有分頁(yè)的url
url = 'http://www.netbian.com/weimei/'
select = '#main > div.page > span.slh'
pageIndex = screenPage(secondUrl, select)
lastPagenum = int(pageIndex) # 獲取最后一頁(yè)的頁(yè)碼
for i in range(lastPagenum):
if i == 0:
url = 'http://www.netbian.com/weimei/index.htm'
else:
url = 'http://www.netbian.com/weimei/ ... 39%3B %(i+1)
由于網(wǎng)站的HTML結構非常清晰,代碼寫(xiě)起來(lái)也很簡(jiǎn)單
第五步:獲取分頁(yè)下圖片指向的URL
通過(guò)查看可以看到獲取到的url是相對地址,需要轉換成絕對地址
select = 'div#main div.list ul li a'
imgUrls = screen(url, select)
這兩行代碼得到的列表中的值是這樣的:
星空 女孩 觀(guān)望 唯美夜景壁紙
第 6 步:找到 1920 × 1080 分辨率的圖像
# 定位到 1920 1080 分辨率圖片
def handleImgs(links, path):
for link in links:
href = link.get('href')
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
# 第一次跳轉
if('http://' in href): # 有極個(gè)別圖片不提供正確的相對地址
url = href
else:
url = index + href
select = 'div#main div.endpage div.pic div.pic-down a'
link = screen(url, select)
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
href = link[0].get('href')
# 第二次跳轉
url = index + href
# 獲取到圖片了
select = 'div#main table a img'
link = screen(url, select)
if(link == []):
print(url + " 該圖片需要登錄才能爬取,爬取失敗")
continue
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
print(name) # 輸出下載圖片的文件名
src = link[0].get('src')
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
print()
download(src, name, path)
time.sleep(interval)
第 7 步:下載圖像
# 下載操作
def download(src, name, path):
if(isinstance(src, str)):
response = requests.get(src)
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
with open(path,'wb') as pic:
for chunk in response.iter_content(128):
pic.write(chunk)
目錄五:代碼容錯
1:過(guò)濾圖片廣告
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
二:第一次跳轉到頁(yè)面,沒(méi)有我們需要的鏈接
對方壁紙網(wǎng)站,給第一個(gè)跳轉頁(yè)面的鏈接一個(gè)相對地址
但是很少有圖片直接給出絕對地址,并且給出類(lèi)別URL,所以需要分兩步處理
if('http://' in href):
url = href
else:
url = index + href
...
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
以下是第二次跳轉頁(yè)面遇到的問(wèn)題
三:由于權限問(wèn)題無(wú)法爬取圖片
if(link == []):
print(url + "該圖片需要登錄才能爬取,爬取失敗")
continue
四:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)中帶有\t或者文件名中不允許出現的特殊字符:
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
五:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)重復
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
六:圖片鏈接404
例如
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
目錄 6:完整代碼
最后
動(dòng)動(dòng)你的小手發(fā)財,給小編一份關(guān)心是小編最大的動(dòng)力,謝謝! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(【干貨】網(wǎng)頁(yè)的壁紙都爬取了,你知道嗎?)
前言
我想每個(gè)人都更喜歡漂亮的照片!不要隱瞞任何事情,每個(gè)人都知道對美麗的熱愛(ài)。小編最近也比較無(wú)聊,就去爬壁紙、圖片等。所以我添加了一些代碼來(lái)抓取整個(gè)網(wǎng)頁(yè)的所有壁紙。
目錄 1:概述
在電腦上,創(chuàng )建一個(gè)文件夾,用來(lái)存放爬到對方桌面的圖片

這個(gè)文件夾下有25個(gè)文件夾,對應分類(lèi)

每個(gè)分類(lèi)文件夾下有幾個(gè)文件夾,對應頁(yè)碼

在頁(yè)碼文件夾下,存放圖片文件
目錄二:環(huán)境準備
在終端中分別輸入以下 pip 命令進(jìn)行安裝
python -m pip install beautifulsoup4
python -m pip install lxml
python -m pip install requests
內容三:分析頁(yè)面結構

4k類(lèi)別下的壁紙是網(wǎng)站收入的重要資源,我們對4k壁紙有需求,所以不抓取

我用審美類(lèi)下的壁紙來(lái)講解下如何爬取圖片

1.一共73頁(yè),除了最后一頁(yè),每頁(yè)18張圖片

但是在代碼中,我們最好需要自動(dòng)獲取總頁(yè)碼,嗯,對方桌面壁紙網(wǎng)站的結構真的很舒服,基本上每個(gè)頁(yè)碼的html結構都差不多

CSS選擇器:div.page a,定位到包裹頁(yè)數的a標簽,只有6個(gè)
并且每頁(yè)第三張圖片是同一個(gè)廣告,需要在代碼中過(guò)濾掉
每個(gè)分頁(yè)的超鏈接清晰:/weimei/index_x.htm
x 正是頁(yè)面的頁(yè)碼
注意:您在類(lèi)別下看到的圖片是低分辨率的縮略圖;要得到分辨率為1920×1080的圖片,需要進(jìn)行兩次跳轉
下圖是一個(gè)例子

在分類(lèi)頁(yè)面中,我們可以直接獲取圖片的url,但遺憾的是,它的分辨率并不理想;
通過(guò)檢查,很明顯類(lèi)別頁(yè)面中顯示的每個(gè)圖像都指向另一個(gè)超鏈接

CSS選擇器:div#main div.list ul li a,定位到包裹圖片的a標簽
點(diǎn)擊圖片,第一次跳轉,跳轉到新鏈接,頁(yè)面顯示如下內容:

CSS選擇器:div#main div.endpage div.pic div.pic-down a,找到包裹圖片的a標簽
點(diǎn)擊按鈕下載壁紙(1920×1080),第二次跳轉,轉向新鏈接,最終達到目的,鏈接中顯示的圖片分辨率為1920×1080
幾經(jīng)周折,終于為我找到了圖片的1920×1080高清圖
CSS選擇器:div#main table a img,定位圖片的img標簽
經(jīng)過(guò)我自己的爬蟲(chóng)檢查,很少有圖片因為很多碎片問(wèn)題而無(wú)法下載,還有少數圖片是因為網(wǎng)站雖然提供了1920×1080分辨率的下載按鈕,但還是給了其他決議。
目錄4:代碼分析
第一步:設置全局變量
index = 'http://www.netbian.com' # 網(wǎng)站根地址
interval = 10 # 爬取圖片的間隔時(shí)間
firstDir = 'D:/zgh/Pictures/netbian' # 總路徑
classificationDict = {} # 存放網(wǎng)站分類(lèi)子頁(yè)面的信息
第二步:獲取頁(yè)面過(guò)濾后的內容列表
def screen(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers()) # 隨機獲取一個(gè)headers
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)

第三步:獲取所有類(lèi)別的 URL
# 將分類(lèi)子頁(yè)面信息存放在字典中
def init_classification():
url = index
select = '#header > div.head > ul > li:nth-child(1) > div > a'
classifications = screen(url, select)
for c in classifications:
href = c.get('href') # 獲取的是相對地址
text = c.string # 獲取分類(lèi)名
if(text == '4k壁紙'): # 4k壁紙,因權限問(wèn)題無(wú)法爬取,直接跳過(guò)
continue
secondDir = firstDir + '/' + text # 分類(lèi)目錄
url = index + href # 分類(lèi)子頁(yè)面url
global classificationDict
classificationDict[text] = {
'path': secondDir,
'url': url
}
在接下來(lái)的代碼中,我將使用審美類(lèi)別下的壁紙來(lái)講解如何通過(guò)兩次跳轉鏈接爬取高清圖片
第四步:獲取分類(lèi)頁(yè)面下所有頁(yè)面的url
大多數類(lèi)別的分頁(yè)大于等于6頁(yè),可以直接使用上面定義的screen函數,select定義為div.page a,然后screen函數返回的列表中的第六個(gè)元素可以得到最后一個(gè)我們需要的頁(yè)碼
但是,有些類(lèi)別的頁(yè)數少于 6 頁(yè),例如:

您需要重寫(xiě)一個(gè)過(guò)濾器函數以通過(guò)兄弟元素獲取它
# 獲取頁(yè)碼
def screenPage(url, select):
html = requests.get(url = url, headers = UserAgent.get_headers())
html.encoding = 'gbk'
html = html.text
soup = BeautifulSoup(html, 'lxml')
return soup.select(select)[0].next_sibling.text
獲取分類(lèi)頁(yè)面下所有分頁(yè)的url
url = 'http://www.netbian.com/weimei/'
select = '#main > div.page > span.slh'
pageIndex = screenPage(secondUrl, select)
lastPagenum = int(pageIndex) # 獲取最后一頁(yè)的頁(yè)碼
for i in range(lastPagenum):
if i == 0:
url = 'http://www.netbian.com/weimei/index.htm'
else:
url = 'http://www.netbian.com/weimei/ ... 39%3B %(i+1)
由于網(wǎng)站的HTML結構非常清晰,代碼寫(xiě)起來(lái)也很簡(jiǎn)單
第五步:獲取分頁(yè)下圖片指向的URL
通過(guò)查看可以看到獲取到的url是相對地址,需要轉換成絕對地址

select = 'div#main div.list ul li a'
imgUrls = screen(url, select)
這兩行代碼得到的列表中的值是這樣的:

第 6 步:找到 1920 × 1080 分辨率的圖像
# 定位到 1920 1080 分辨率圖片
def handleImgs(links, path):
for link in links:
href = link.get('href')
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
# 第一次跳轉
if('http://' in href): # 有極個(gè)別圖片不提供正確的相對地址
url = href
else:
url = index + href
select = 'div#main div.endpage div.pic div.pic-down a'
link = screen(url, select)
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
href = link[0].get('href')
# 第二次跳轉
url = index + href
# 獲取到圖片了
select = 'div#main table a img'
link = screen(url, select)
if(link == []):
print(url + " 該圖片需要登錄才能爬取,爬取失敗")
continue
name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
print(name) # 輸出下載圖片的文件名
src = link[0].get('src')
if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
print()
download(src, name, path)
time.sleep(interval)
第 7 步:下載圖像
# 下載操作
def download(src, name, path):
if(isinstance(src, str)):
response = requests.get(src)
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
with open(path,'wb') as pic:
for chunk in response.iter_content(128):
pic.write(chunk)
目錄五:代碼容錯
1:過(guò)濾圖片廣告
if(href == 'http://pic.netbian.com/'): # 過(guò)濾圖片廣告
continue
二:第一次跳轉到頁(yè)面,沒(méi)有我們需要的鏈接
對方壁紙網(wǎng)站,給第一個(gè)跳轉頁(yè)面的鏈接一個(gè)相對地址
但是很少有圖片直接給出絕對地址,并且給出類(lèi)別URL,所以需要分兩步處理
if('http://' in href):
url = href
else:
url = index + href
...
if(link == []):
print(url + ' 無(wú)此圖片,爬取失敗')
continue
以下是第二次跳轉頁(yè)面遇到的問(wèn)題
三:由于權限問(wèn)題無(wú)法爬取圖片
if(link == []):
print(url + "該圖片需要登錄才能爬取,爬取失敗")
continue
四:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)中帶有\t或者文件名中不允許出現的特殊字符:

name = link[0].get('alt').replace('\t', '').replace('|', '').replace(':', '').replace('\\', '').replace('/', '').replace('*', '').replace('?', '').replace('"', '').replace('', '')
五:獲取img的alt作為下載的圖片文件的文件名,名稱(chēng)重復
path = path + '/' + name + '.jpg'
while(os.path.exists(path)): # 若文件名重復
path = path.split(".")[0] + str(random.randint(2, 17)) + '.' + path.split(".")[1]
六:圖片鏈接404
例如

if(requests.get(src).status_code == 404):
print(url + ' 該圖片下載鏈接404,爬取失敗')
print()
continue
目錄 6:完整代碼

最后
動(dòng)動(dòng)你的小手發(fā)財,給小編一份關(guān)心是小編最大的動(dòng)力,謝謝!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(貓評論信息和圖片下載的二合一升級版() )
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 110 次瀏覽 ? 2022-03-04 19:07
)
之前我做過(guò)天貓評論信息抓取,還有評論圖片下載,但是那一次我把所有的信息都存到數據庫里,然后從數據庫中提取圖片信息下載。這次我做了信息爬取和圖片下載二合一升級版。
這一次,我們瞄準的是京東nike自營(yíng)店。
鏈接是:
老辦法,按F12打開(kāi)流量監控,點(diǎn)擊網(wǎng)絡(luò )中的js,然后在眾多信息中找到存放評論信息的鏈接,如下:
我找到的最后一個(gè)鏈接如下所示:
打開(kāi)鏈接后發(fā)現也是json格式的,很簡(jiǎn)單
先用urllib.request打開(kāi)鏈接,然后用json加載json文件,代碼如下:
url='https://sclub.jd.com/comment/p ... 39%3B
html = urllib.request.urlopen(url).read().decode('gbk')
jsondata = re.search(r'\{.*\}', html).group()
data = json.loads(jsondata)
這里使用正則是因為打開(kāi)ht??ml后發(fā)現是這樣的:
我們需要的json格式文件放在那個(gè)()里面。
得到j(luò )son格式的數據后,需要對數據進(jìn)行過(guò)濾。我把用戶(hù)名和評論等一些信息放入數據庫,圖片立即下載
先寫(xiě)一個(gè)循環(huán)遍歷當前url中的所有評論內容,部分代碼如下:
for i in range(0, len(data['comments'])):
id = data['comments'][i]['nickname']
# 用戶(hù)名
content = data['comments'][i]['content']
# 評論
time = data['comments'][i]['creationTime']
# 評論日期
type = data['comments'][i]['referenceName']
# 型號及顏色
在爬取圖片鏈接下載的時(shí)候,因為有些評論沒(méi)有圖片,所以需要判斷key是否存在。
if('images' in data['comments'][i].keys()):
如果存在,請獲取圖片鏈接,完成鏈接并下載:
pics = data['comments'][i]['images'][k]['imgUrl']
a='http:'+pics
urllib.request.urlretrieve(a, 'D:\jd_pics/' + str(z)+'_'+str(i+1) + '_' + 'pic' + '_' + str(k) + '.jpg')
# 買(mǎi)家秀,命名規則:第幾頁(yè)第幾條評論的第幾個(gè)圖片
對于后續審稿的爬取,大體思路同上,這里不再贅述。
最后就是考慮循環(huán)抓取了,只要寫(xiě)個(gè)循環(huán)就可以了
for j in range(0,150):
url='https://sclub.jd.com/comment/p ... 2Bstr(j)+'&pageSize=10&isShadowSku=0&fold=1'
我在這里嘗試抓取前150頁(yè)評論的內容,因為我要邊抓取邊下載圖片,所以需要很長(cháng)時(shí)間。我花了大約25分鐘,終于在數據庫中得到了1000條信息
和本地1216圖片
呵呵~這不對,150頁(yè)每頁(yè)10條信息,總數應該是1500!為什么我的數據庫中只有 1000 個(gè)條目?
我去百度了一下,一位前輩是這樣解釋的:
“在 MySQL 中,每個(gè)數據庫最多可以創(chuàng )建 20 億個(gè)表,一個(gè)表允許定義 1024 列,每行最大長(cháng)度為 8092 字節(不包括文本和圖像類(lèi)型的長(cháng)度)。
當表定義為 varchar、nvarchar 或 varbinary 類(lèi)型列時(shí),如果插入表中的數據行超過(guò) 8092 字節,則 Transact-SQL 語(yǔ)句將失敗并生成錯誤消息。
SQL對每張表的行數沒(méi)有直接限制,但受數據庫存儲空間的限制。
每個(gè)數據庫的最大空間是1048516TB,所以一個(gè)表的最大可用空間是1048516TB減去數據庫類(lèi)系統表和其他數據庫對象占用的空間。"
也就是說(shuō),一個(gè)數據庫的容量肯定是夠用的,那剩下的 500 條記錄到哪里去了呢?
找了半天,發(fā)現navicat for mysql有分頁(yè)功能,自動(dòng)幫我分頁(yè)
oh~傻哭自己
我是學(xué)生,剛開(kāi)始學(xué)習python爬蟲(chóng)。如果本文和代碼有漏洞,還望各位大神賜教,謝謝!
查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(貓評論信息和圖片下載的二合一升級版()
)
之前我做過(guò)天貓評論信息抓取,還有評論圖片下載,但是那一次我把所有的信息都存到數據庫里,然后從數據庫中提取圖片信息下載。這次我做了信息爬取和圖片下載二合一升級版。
這一次,我們瞄準的是京東nike自營(yíng)店。
鏈接是:
老辦法,按F12打開(kāi)流量監控,點(diǎn)擊網(wǎng)絡(luò )中的js,然后在眾多信息中找到存放評論信息的鏈接,如下:
我找到的最后一個(gè)鏈接如下所示:
打開(kāi)鏈接后發(fā)現也是json格式的,很簡(jiǎn)單
先用urllib.request打開(kāi)鏈接,然后用json加載json文件,代碼如下:
url='https://sclub.jd.com/comment/p ... 39%3B
html = urllib.request.urlopen(url).read().decode('gbk')
jsondata = re.search(r'\{.*\}', html).group()
data = json.loads(jsondata)
這里使用正則是因為打開(kāi)ht??ml后發(fā)現是這樣的:
我們需要的json格式文件放在那個(gè)()里面。
得到j(luò )son格式的數據后,需要對數據進(jìn)行過(guò)濾。我把用戶(hù)名和評論等一些信息放入數據庫,圖片立即下載
先寫(xiě)一個(gè)循環(huán)遍歷當前url中的所有評論內容,部分代碼如下:
for i in range(0, len(data['comments'])):
id = data['comments'][i]['nickname']
# 用戶(hù)名
content = data['comments'][i]['content']
# 評論
time = data['comments'][i]['creationTime']
# 評論日期
type = data['comments'][i]['referenceName']
# 型號及顏色
在爬取圖片鏈接下載的時(shí)候,因為有些評論沒(méi)有圖片,所以需要判斷key是否存在。
if('images' in data['comments'][i].keys()):
如果存在,請獲取圖片鏈接,完成鏈接并下載:
pics = data['comments'][i]['images'][k]['imgUrl']
a='http:'+pics
urllib.request.urlretrieve(a, 'D:\jd_pics/' + str(z)+'_'+str(i+1) + '_' + 'pic' + '_' + str(k) + '.jpg')
# 買(mǎi)家秀,命名規則:第幾頁(yè)第幾條評論的第幾個(gè)圖片
對于后續審稿的爬取,大體思路同上,這里不再贅述。
最后就是考慮循環(huán)抓取了,只要寫(xiě)個(gè)循環(huán)就可以了
for j in range(0,150):
url='https://sclub.jd.com/comment/p ... 2Bstr(j)+'&pageSize=10&isShadowSku=0&fold=1'
我在這里嘗試抓取前150頁(yè)評論的內容,因為我要邊抓取邊下載圖片,所以需要很長(cháng)時(shí)間。我花了大約25分鐘,終于在數據庫中得到了1000條信息
和本地1216圖片
呵呵~這不對,150頁(yè)每頁(yè)10條信息,總數應該是1500!為什么我的數據庫中只有 1000 個(gè)條目?
我去百度了一下,一位前輩是這樣解釋的:
“在 MySQL 中,每個(gè)數據庫最多可以創(chuàng )建 20 億個(gè)表,一個(gè)表允許定義 1024 列,每行最大長(cháng)度為 8092 字節(不包括文本和圖像類(lèi)型的長(cháng)度)。
當表定義為 varchar、nvarchar 或 varbinary 類(lèi)型列時(shí),如果插入表中的數據行超過(guò) 8092 字節,則 Transact-SQL 語(yǔ)句將失敗并生成錯誤消息。
SQL對每張表的行數沒(méi)有直接限制,但受數據庫存儲空間的限制。
每個(gè)數據庫的最大空間是1048516TB,所以一個(gè)表的最大可用空間是1048516TB減去數據庫類(lèi)系統表和其他數據庫對象占用的空間。"
也就是說(shuō),一個(gè)數據庫的容量肯定是夠用的,那剩下的 500 條記錄到哪里去了呢?
找了半天,發(fā)現navicat for mysql有分頁(yè)功能,自動(dòng)幫我分頁(yè)

oh~傻哭自己


我是學(xué)生,剛開(kāi)始學(xué)習python爬蟲(chóng)。如果本文和代碼有漏洞,還望各位大神賜教,謝謝!

網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(大數據技術(shù)被用于各行各業(yè),一切都是有不同的處理方式)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 54 次瀏覽 ? 2022-03-04 07:17
大數據技術(shù)現在應用在各行各業(yè),回歸、SVM、神經(jīng)網(wǎng)絡(luò )、文本分析……各種真棒的模擬和預測,但沒(méi)有數據,一切都是空談!許多人使用爬蟲(chóng)來(lái)采集網(wǎng)頁(yè)信息。問(wèn)題是爬下來(lái)的數據有什么用。這取決于個(gè)人的能力。對于同樣的數據,不同的人會(huì )有不同的處理方式,會(huì )導致不同的結果。下面為您介紹一些典型的應用場(chǎng)景:
1、電子商務(wù)網(wǎng)站的產(chǎn)品數據
爬取了某個(gè)行業(yè)的產(chǎn)品信息,包括品牌、價(jià)格、銷(xiāo)量、規格型號等。然后分析該行業(yè)的暢銷(xiāo)品牌、暢銷(xiāo)品類(lèi)、價(jià)格趨勢、行業(yè)前景等。信息量還是很大的。
2、微博/BBS輿情數據
針對某個(gè)話(huà)題,從微博和論壇中抓取相關(guān)信息,挖掘該話(huà)題的一些有趣的輿情信息。事實(shí)上,利用爬蟲(chóng)進(jìn)行輿情監測是比較成熟的,很多大公司都有相關(guān)的監測部門(mén)。但是微博的反爬機制比較麻煩,部分數據采集不完整。
3、新聞?wù)?br /> 新聞文字其實(shí)是一種輿論,但比微博上的文字更正式。在百度新聞上爬取某個(gè)關(guān)鍵詞的信息,每周梳理幾條關(guān)鍵詞,可以掌握行業(yè)動(dòng)態(tài)。
4、學(xué)術(shù)信息
抓取一些關(guān)于學(xué)術(shù)網(wǎng)站 的信息以供學(xué)習和研究。比如在CNKI上,如果你輸入一個(gè)關(guān)鍵詞,比如大數據,就會(huì )出現很多與大數據相關(guān)的文獻。
點(diǎn)擊進(jìn)入,會(huì )有每個(gè)文檔的基本信息、摘要等信息。如果你是研究人員或學(xué)生,點(diǎn)擊并一一記錄下來(lái)太費時(shí)間了。寫(xiě)一個(gè)爬蟲(chóng),你可以按照標準格式爬取所有的數據,然后閱讀和進(jìn)一步分析就會(huì )方便很多。. 使用 GooSeeker 爬蟲(chóng)可以輕松地采集 批量下載此類(lèi)網(wǎng)頁(yè)。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(大數據技術(shù)被用于各行各業(yè),一切都是有不同的處理方式)
大數據技術(shù)現在應用在各行各業(yè),回歸、SVM、神經(jīng)網(wǎng)絡(luò )、文本分析……各種真棒的模擬和預測,但沒(méi)有數據,一切都是空談!許多人使用爬蟲(chóng)來(lái)采集網(wǎng)頁(yè)信息。問(wèn)題是爬下來(lái)的數據有什么用。這取決于個(gè)人的能力。對于同樣的數據,不同的人會(huì )有不同的處理方式,會(huì )導致不同的結果。下面為您介紹一些典型的應用場(chǎng)景:
1、電子商務(wù)網(wǎng)站的產(chǎn)品數據
爬取了某個(gè)行業(yè)的產(chǎn)品信息,包括品牌、價(jià)格、銷(xiāo)量、規格型號等。然后分析該行業(yè)的暢銷(xiāo)品牌、暢銷(xiāo)品類(lèi)、價(jià)格趨勢、行業(yè)前景等。信息量還是很大的。
2、微博/BBS輿情數據
針對某個(gè)話(huà)題,從微博和論壇中抓取相關(guān)信息,挖掘該話(huà)題的一些有趣的輿情信息。事實(shí)上,利用爬蟲(chóng)進(jìn)行輿情監測是比較成熟的,很多大公司都有相關(guān)的監測部門(mén)。但是微博的反爬機制比較麻煩,部分數據采集不完整。
3、新聞?wù)?br /> 新聞文字其實(shí)是一種輿論,但比微博上的文字更正式。在百度新聞上爬取某個(gè)關(guān)鍵詞的信息,每周梳理幾條關(guān)鍵詞,可以掌握行業(yè)動(dòng)態(tài)。
4、學(xué)術(shù)信息
抓取一些關(guān)于學(xué)術(shù)網(wǎng)站 的信息以供學(xué)習和研究。比如在CNKI上,如果你輸入一個(gè)關(guān)鍵詞,比如大數據,就會(huì )出現很多與大數據相關(guān)的文獻。
點(diǎn)擊進(jìn)入,會(huì )有每個(gè)文檔的基本信息、摘要等信息。如果你是研究人員或學(xué)生,點(diǎn)擊并一一記錄下來(lái)太費時(shí)間了。寫(xiě)一個(gè)爬蟲(chóng),你可以按照標準格式爬取所有的數據,然后閱讀和進(jìn)一步分析就會(huì )方便很多。. 使用 GooSeeker 爬蟲(chóng)可以輕松地采集 批量下載此類(lèi)網(wǎng)頁(yè)。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)站一般如何實(shí)現圖片懶技術(shù)呢?-八維教育)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 58 次瀏覽 ? 2022-03-03 14:05
關(guān)鍵詞:
逆流而上,用力撐著(zhù)它,一分一毫的懈怠,它就退卻了萬(wàn)千搜索。本文章主要介紹了python網(wǎng)絡(luò )爬蟲(chóng)的圖片懶加載技術(shù)selenium和PhantomJS相關(guān)的知識,希望對大家有所幫助。
一.什么是圖片延遲加載?
- 案例研究:抓取站長(cháng)素材中的圖片數據
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘)
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
運行結果觀(guān)察我們可以得到圖片的名字,但是得到的鏈接是空的。檢查后發(fā)現xpath表達式?jīng)]有問(wèn)題。是什么原因?
- 圖片延遲加載概念:
圖片延遲加載是一種網(wǎng)頁(yè)優(yōu)化技術(shù)。圖片作為一種網(wǎng)絡(luò )資源,在被請求的時(shí)候會(huì )占用網(wǎng)絡(luò )資源,一次加載整個(gè)頁(yè)面的所有圖片會(huì )大大增加頁(yè)面首屏的加載時(shí)間。為了解決這個(gè)問(wèn)題,通過(guò)前后端的配合,圖片只有出現在瀏覽器當前窗口時(shí)才加載,減少首屏圖片請求次數的技術(shù)稱(chēng)為“圖片懶加載” ”。
- 網(wǎng)站一般如何實(shí)現延遲圖片加載技術(shù)?
在網(wǎng)頁(yè)的源碼中,首先在img標簽中使用了一個(gè)“偽屬性”(通常是src2,original...)來(lái)存儲真實(shí)的圖片鏈接,而不是直接存儲在src屬性中。當圖片出現在頁(yè)面可視區域時(shí),偽屬性會(huì )被動(dòng)態(tài)替換為src屬性,完成圖片的加載。
- 站長(cháng)素材案例后續分析:仔細觀(guān)察頁(yè)面結構后發(fā)現,網(wǎng)頁(yè)中圖片的鏈接存放在偽屬性src2中
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘2) #src2偽屬性
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
二.硒
- 什么是硒?
它是 Python 的第三方庫。外部提供的界面可以操作瀏覽器,然后讓瀏覽器完成自動(dòng)操作。
- 環(huán)境建設
1.安裝硒:pip install selenium
2.獲取瀏覽器驅動(dòng)(以谷歌瀏覽器為例)
2.1 谷歌瀏覽器驅動(dòng)下載地址:
2.2 下載的驅動(dòng)必須和瀏覽器版本一致??梢愿鶕峁┑陌姹居成浔磉M(jìn)行映射
- 效果展示:可以運行以下代碼觀(guān)看效果
from selenium import webdriver
from time import sleep
# 后面是你的瀏覽器驅動(dòng)位置,記得前面加r‘‘,‘r‘是防止字符轉義的
driver = webdriver.Chrome(r‘驅動(dòng)程序路徑‘)
# 用get打開(kāi)百度頁(yè)面
driver.get("http://www.baidu.com")
# 查找頁(yè)面的“設置”選項,并進(jìn)行點(diǎn)擊
driver.find_elements_by_link_text(‘設置‘)[0].click()
sleep(2)
# # 打開(kāi)設置后找到“搜索設置”選項,設置為每頁(yè)顯示50條
driver.find_elements_by_link_text(‘搜索設置‘)[0].click()
sleep(2)
# 選中每頁(yè)顯示50條
m = driver.find_element_by_id(‘nr‘)
sleep(2)
m.find_element_by_xpath(‘//*[@id="nr"]/option[3]‘).click()
m.find_element_by_xpath(‘.//option[3]‘).click()
sleep(2)
# 點(diǎn)擊保存設置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)
# 處理彈出的警告頁(yè)面 確定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的輸入框,并輸入 美女
driver.find_element_by_id(‘kw‘).send_keys(‘美女‘)
sleep(2)
# 點(diǎn)擊搜索按鈕
driver.find_element_by_id(‘su‘).click()
sleep(2)
# 在打開(kāi)的頁(yè)面中找到“Selenium - 開(kāi)源中國社區”,并打開(kāi)這個(gè)頁(yè)面
driver.find_elements_by_link_text(‘美女_百度圖片‘)[0].click()
sleep(3)
# 關(guān)閉瀏覽器
driver.quit()
- 代碼操作:
#導包
from selenium import webdriver
#創(chuàng )建瀏覽器對象,通過(guò)該對象可以操作瀏覽器
browser = webdriver.Chrome(‘驅動(dòng)路徑‘)
#使用瀏覽器發(fā)起指定請求
browser.get(url)
#使用下面的方法,查找指定的元素進(jìn)行操作即可
find_element_by_id 根據id找節點(diǎn)
find_elements_by_name 根據name找
find_elements_by_xpath 根據xpath查找
find_elements_by_tag_name 根據標簽名找
find_elements_by_class_name 根據class名字查找
三.幻影JS
PhantomJS 是一款非界面瀏覽器,其自動(dòng)化操作過(guò)程與上述谷歌瀏覽器的操作一致。由于沒(méi)有界面,為了能夠展示自動(dòng)化的操作過(guò)程,PhantomJS為用戶(hù)提供了截圖功能,使用save_screenshot函數實(shí)現。
-案子:
from selenium import webdriver
import time
# phantomjs路徑
path = r‘PhantomJS驅動(dòng)路徑‘
browser = webdriver.PhantomJS(path)
# 打開(kāi)百度
url = ‘http://www.baidu.com/‘
browser.get(url)
time.sleep(3)
browser.save_screenshot(r‘phantomjsaidu.png‘)
# 查找input輸入框
my_input = browser.find_element_by_id(‘kw‘)
# 往框里面寫(xiě)文字
my_input.send_keys(‘美女‘)
time.sleep(3)
#截屏
browser.save_screenshot(r‘phantomjsmeinv.png‘)
# 查找搜索按鈕
button = browser.find_elements_by_class_name(‘s_btn‘)[0]
button.click()
time.sleep(3)
browser.save_screenshot(r‘phantomjsshow.png‘)
time.sleep(3)
browser.quit()
【重點(diǎn)】selenium+phantomjs是爬蟲(chóng)的終極解決方案:網(wǎng)站上的一些內容信息是通過(guò)動(dòng)態(tài)加載js形成的,所以使用普通爬蟲(chóng)程序無(wú)法回到動(dòng)態(tài)加載的js內容。例如,豆瓣電影中的電影信息是通過(guò)下拉操作動(dòng)態(tài)加載更多電影信息的。
綜合操作:
- 要求:盡可能多地在豆瓣上爬取電影信息
from selenium import webdriver
from time import sleep
import time
if __name__ == ‘__main__‘:
url = ‘https://movie.douban.com/typer ... on%3D‘
# 發(fā)起請求前,可以讓url表示的頁(yè)面動(dòng)態(tài)加載出更多的數據
path = r‘C:UsersAdministratorDesktop爬蟲(chóng)授課day05ziliaophantomjs-2.1.1-windowsinphantomjs.exe‘
# 創(chuàng )建無(wú)界面的瀏覽器對象
bro = webdriver.PhantomJS(path)
# 發(fā)起url請求
bro.get(url)
time.sleep(3)
# 截圖
bro.save_screenshot(‘1.png‘)
# 執行js代碼(讓滾動(dòng)條向下偏移n個(gè)像素(作用:動(dòng)態(tài)加載了更多的電影信息))
js = ‘document.body.scrollTop=2000‘
bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼
time.sleep(4)
bro.save_screenshot(‘2.png‘)
time.sleep(2)
# 使用爬蟲(chóng)程序爬去當前url中的內容
html_source = bro.page_source # 該屬性可以獲取當前瀏覽器的當前頁(yè)的源碼(html)
with open(‘./source.html‘, ‘w‘, encoding=‘utf-8‘) as fp:
fp.write(html_source)
bro.quit()
四.谷歌無(wú)頭瀏覽器
由于 PhantomJs 最近已經(jīng)停止更新和維護,建議大家使用谷歌的無(wú)頭瀏覽器,這是一款沒(méi)有界面的谷歌瀏覽器。
1 from selenium import webdriver
2 from selenium.webdriver.chrome.options import Options
3 import time
4
5 # 創(chuàng )建一個(gè)參數對象,用來(lái)控制chrome以無(wú)界面模式打開(kāi)
6 chrome_options = Options()
7 chrome_options.add_argument(‘--headless‘)
8 chrome_options.add_argument(‘--disable-gpu‘)
9 # 驅動(dòng)路徑
10 path = r‘C:UsersBLiDesktop1801day05ziliaochromedriver.exe‘
11
12 # 創(chuàng )建瀏覽器對象
13 browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
14
15 # 上網(wǎng)
16 url = ‘http://www.baidu.com/‘
17 browser.get(url)
18 time.sleep(3)
19
20 browser.save_screenshot(‘baidu.png‘)
21
22 browser.quit()
至此,這篇關(guān)于Python網(wǎng)絡(luò )爬蟲(chóng)selenium和PhantomJS的懶加載技術(shù)的文章就講完了。如果您的問(wèn)題無(wú)法解決,請參考以下文章: 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)站一般如何實(shí)現圖片懶技術(shù)呢?-八維教育)
關(guān)鍵詞:
逆流而上,用力撐著(zhù)它,一分一毫的懈怠,它就退卻了萬(wàn)千搜索。本文章主要介紹了python網(wǎng)絡(luò )爬蟲(chóng)的圖片懶加載技術(shù)selenium和PhantomJS相關(guān)的知識,希望對大家有所幫助。
一.什么是圖片延遲加載?
- 案例研究:抓取站長(cháng)素材中的圖片數據
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘)
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
運行結果觀(guān)察我們可以得到圖片的名字,但是得到的鏈接是空的。檢查后發(fā)現xpath表達式?jīng)]有問(wèn)題。是什么原因?
- 圖片延遲加載概念:
圖片延遲加載是一種網(wǎng)頁(yè)優(yōu)化技術(shù)。圖片作為一種網(wǎng)絡(luò )資源,在被請求的時(shí)候會(huì )占用網(wǎng)絡(luò )資源,一次加載整個(gè)頁(yè)面的所有圖片會(huì )大大增加頁(yè)面首屏的加載時(shí)間。為了解決這個(gè)問(wèn)題,通過(guò)前后端的配合,圖片只有出現在瀏覽器當前窗口時(shí)才加載,減少首屏圖片請求次數的技術(shù)稱(chēng)為“圖片懶加載” ”。
- 網(wǎng)站一般如何實(shí)現延遲圖片加載技術(shù)?
在網(wǎng)頁(yè)的源碼中,首先在img標簽中使用了一個(gè)“偽屬性”(通常是src2,original...)來(lái)存儲真實(shí)的圖片鏈接,而不是直接存儲在src屬性中。當圖片出現在頁(yè)面可視區域時(shí),偽屬性會(huì )被動(dòng)態(tài)替換為src屬性,完成圖片的加載。
- 站長(cháng)素材案例后續分析:仔細觀(guān)察頁(yè)面結構后發(fā)現,網(wǎng)頁(yè)中圖片的鏈接存放在偽屬性src2中
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
url = ‘http://sc.chinaz.com/tupian/gudianmeinvtupian.html‘
headers = {
‘User-Agent‘: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36‘,
}
#獲取頁(yè)面文本數據
response = requests.get(url=url,headers=headers)
response.encoding = ‘utf-8‘
page_text = response.text
#解析頁(yè)面數據(獲取頁(yè)面中的圖片鏈接)
#創(chuàng )建etree對象
tree = etree.HTML(page_text)
div_list = tree.xpath(‘//div[@id="container"]/div‘)
#解析獲取圖片地址和圖片的名稱(chēng)
for div in div_list:
image_url = div.xpath(‘.//img/@src‘2) #src2偽屬性
image_name = div.xpath(‘.//img/@alt‘)
print(image_url) #打印圖片鏈接
print(image_name)#打印圖片名稱(chēng)
二.硒
- 什么是硒?
它是 Python 的第三方庫。外部提供的界面可以操作瀏覽器,然后讓瀏覽器完成自動(dòng)操作。
- 環(huán)境建設
1.安裝硒:pip install selenium
2.獲取瀏覽器驅動(dòng)(以谷歌瀏覽器為例)
2.1 谷歌瀏覽器驅動(dòng)下載地址:
2.2 下載的驅動(dòng)必須和瀏覽器版本一致??梢愿鶕峁┑陌姹居成浔磉M(jìn)行映射
- 效果展示:可以運行以下代碼觀(guān)看效果
from selenium import webdriver
from time import sleep
# 后面是你的瀏覽器驅動(dòng)位置,記得前面加r‘‘,‘r‘是防止字符轉義的
driver = webdriver.Chrome(r‘驅動(dòng)程序路徑‘)
# 用get打開(kāi)百度頁(yè)面
driver.get("http://www.baidu.com")
# 查找頁(yè)面的“設置”選項,并進(jìn)行點(diǎn)擊
driver.find_elements_by_link_text(‘設置‘)[0].click()
sleep(2)
# # 打開(kāi)設置后找到“搜索設置”選項,設置為每頁(yè)顯示50條
driver.find_elements_by_link_text(‘搜索設置‘)[0].click()
sleep(2)
# 選中每頁(yè)顯示50條
m = driver.find_element_by_id(‘nr‘)
sleep(2)
m.find_element_by_xpath(‘//*[@id="nr"]/option[3]‘).click()
m.find_element_by_xpath(‘.//option[3]‘).click()
sleep(2)
# 點(diǎn)擊保存設置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)
# 處理彈出的警告頁(yè)面 確定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的輸入框,并輸入 美女
driver.find_element_by_id(‘kw‘).send_keys(‘美女‘)
sleep(2)
# 點(diǎn)擊搜索按鈕
driver.find_element_by_id(‘su‘).click()
sleep(2)
# 在打開(kāi)的頁(yè)面中找到“Selenium - 開(kāi)源中國社區”,并打開(kāi)這個(gè)頁(yè)面
driver.find_elements_by_link_text(‘美女_百度圖片‘)[0].click()
sleep(3)
# 關(guān)閉瀏覽器
driver.quit()
- 代碼操作:
#導包
from selenium import webdriver
#創(chuàng )建瀏覽器對象,通過(guò)該對象可以操作瀏覽器
browser = webdriver.Chrome(‘驅動(dòng)路徑‘)
#使用瀏覽器發(fā)起指定請求
browser.get(url)
#使用下面的方法,查找指定的元素進(jìn)行操作即可
find_element_by_id 根據id找節點(diǎn)
find_elements_by_name 根據name找
find_elements_by_xpath 根據xpath查找
find_elements_by_tag_name 根據標簽名找
find_elements_by_class_name 根據class名字查找
三.幻影JS
PhantomJS 是一款非界面瀏覽器,其自動(dòng)化操作過(guò)程與上述谷歌瀏覽器的操作一致。由于沒(méi)有界面,為了能夠展示自動(dòng)化的操作過(guò)程,PhantomJS為用戶(hù)提供了截圖功能,使用save_screenshot函數實(shí)現。
-案子:
from selenium import webdriver
import time
# phantomjs路徑
path = r‘PhantomJS驅動(dòng)路徑‘
browser = webdriver.PhantomJS(path)
# 打開(kāi)百度
url = ‘http://www.baidu.com/‘
browser.get(url)
time.sleep(3)
browser.save_screenshot(r‘phantomjsaidu.png‘)
# 查找input輸入框
my_input = browser.find_element_by_id(‘kw‘)
# 往框里面寫(xiě)文字
my_input.send_keys(‘美女‘)
time.sleep(3)
#截屏
browser.save_screenshot(r‘phantomjsmeinv.png‘)
# 查找搜索按鈕
button = browser.find_elements_by_class_name(‘s_btn‘)[0]
button.click()
time.sleep(3)
browser.save_screenshot(r‘phantomjsshow.png‘)
time.sleep(3)
browser.quit()
【重點(diǎn)】selenium+phantomjs是爬蟲(chóng)的終極解決方案:網(wǎng)站上的一些內容信息是通過(guò)動(dòng)態(tài)加載js形成的,所以使用普通爬蟲(chóng)程序無(wú)法回到動(dòng)態(tài)加載的js內容。例如,豆瓣電影中的電影信息是通過(guò)下拉操作動(dòng)態(tài)加載更多電影信息的。
綜合操作:
- 要求:盡可能多地在豆瓣上爬取電影信息
from selenium import webdriver
from time import sleep
import time
if __name__ == ‘__main__‘:
url = ‘https://movie.douban.com/typer ... on%3D‘
# 發(fā)起請求前,可以讓url表示的頁(yè)面動(dòng)態(tài)加載出更多的數據
path = r‘C:UsersAdministratorDesktop爬蟲(chóng)授課day05ziliaophantomjs-2.1.1-windowsinphantomjs.exe‘
# 創(chuàng )建無(wú)界面的瀏覽器對象
bro = webdriver.PhantomJS(path)
# 發(fā)起url請求
bro.get(url)
time.sleep(3)
# 截圖
bro.save_screenshot(‘1.png‘)
# 執行js代碼(讓滾動(dòng)條向下偏移n個(gè)像素(作用:動(dòng)態(tài)加載了更多的電影信息))
js = ‘document.body.scrollTop=2000‘
bro.execute_script(js) # 該函數可以執行一組字符串形式的js代碼
time.sleep(4)
bro.save_screenshot(‘2.png‘)
time.sleep(2)
# 使用爬蟲(chóng)程序爬去當前url中的內容
html_source = bro.page_source # 該屬性可以獲取當前瀏覽器的當前頁(yè)的源碼(html)
with open(‘./source.html‘, ‘w‘, encoding=‘utf-8‘) as fp:
fp.write(html_source)
bro.quit()
四.谷歌無(wú)頭瀏覽器
由于 PhantomJs 最近已經(jīng)停止更新和維護,建議大家使用谷歌的無(wú)頭瀏覽器,這是一款沒(méi)有界面的谷歌瀏覽器。
1 from selenium import webdriver
2 from selenium.webdriver.chrome.options import Options
3 import time
4
5 # 創(chuàng )建一個(gè)參數對象,用來(lái)控制chrome以無(wú)界面模式打開(kāi)
6 chrome_options = Options()
7 chrome_options.add_argument(‘--headless‘)
8 chrome_options.add_argument(‘--disable-gpu‘)
9 # 驅動(dòng)路徑
10 path = r‘C:UsersBLiDesktop1801day05ziliaochromedriver.exe‘
11
12 # 創(chuàng )建瀏覽器對象
13 browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
14
15 # 上網(wǎng)
16 url = ‘http://www.baidu.com/‘
17 browser.get(url)
18 time.sleep(3)
19
20 browser.save_screenshot(‘baidu.png‘)
21
22 browser.quit()
至此,這篇關(guān)于Python網(wǎng)絡(luò )爬蟲(chóng)selenium和PhantomJS的懶加載技術(shù)的文章就講完了。如果您的問(wèn)題無(wú)法解決,請參考以下文章:
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么用Python寫(xiě)爬蟲(chóng)程序:爬蟲(chóng)前奏)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 73 次瀏覽 ? 2022-03-03 14:01
爬行動(dòng)物前奏
爬蟲(chóng)實(shí)例:
搜索引擎(百度、谷歌、360搜索等)。
伯樂(lè )在線(xiàn)。
慧慧購物助理。
數據分析與研究(數據冰山知乎欄目)。
搶票軟件等
什么是網(wǎng)絡(luò )爬蟲(chóng):
通俗理解:爬蟲(chóng)是模擬人類(lèi)請求行為的程序網(wǎng)站。它可以自動(dòng)請求網(wǎng)頁(yè),獲取數據,然后使用一定的規則來(lái)提取有價(jià)值的數據。
專(zhuān)業(yè)介紹:百度百科。
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng):
萬(wàn)能爬蟲(chóng):萬(wàn)能爬蟲(chóng)是搜索引擎爬蟲(chóng)系統(百度、谷歌、搜狗等)的重要組成部分。主要是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
Focused crawler:是一種針對特定需求的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般爬蟲(chóng)的區別在于:聚焦爬蟲(chóng)在實(shí)現網(wǎng)頁(yè)爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行過(guò)濾處理,并盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息。.
為什么要用 Python 編寫(xiě)爬蟲(chóng)程序:
PHP:PHP是世界上最好的語(yǔ)言,但他不是天生就干這個(gè)的,而且對多線(xiàn)程、異步支持、并發(fā)處理能力弱等問(wèn)題也不是很好。爬蟲(chóng)是一個(gè)工具程序,對速度和效率的要求很高。
Java:生態(tài)非常完整,是Python爬蟲(chóng)最大的競爭對手。但是Java語(yǔ)言本身很笨重,代碼量很大。重構的成本比較高,任何修改都會(huì )導致代碼的大量變化。爬蟲(chóng)經(jīng)常需要修改 采集 代碼。
C/C++:運行效率無(wú)敵。但學(xué)習和發(fā)展成本很高。寫(xiě)一個(gè)小爬蟲(chóng)可能需要半天以上的時(shí)間。
Python:語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,支持的模塊多。相關(guān)的HTTP請求模塊和HTML解析模塊非常豐富。還有 Scrapy 和 Scrapy-redis 框架,讓我們開(kāi)發(fā)爬蟲(chóng)變得非常容易。
準備工具:
Python3.6 開(kāi)發(fā)環(huán)境。
Pycharm 2017 專(zhuān)業(yè)版。
虛擬環(huán)境。虛擬環(huán)境/虛擬環(huán)境包裝器。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(為什么用Python寫(xiě)爬蟲(chóng)程序:爬蟲(chóng)前奏)
爬行動(dòng)物前奏
爬蟲(chóng)實(shí)例:
搜索引擎(百度、谷歌、360搜索等)。
伯樂(lè )在線(xiàn)。
慧慧購物助理。
數據分析與研究(數據冰山知乎欄目)。
搶票軟件等
什么是網(wǎng)絡(luò )爬蟲(chóng):
通俗理解:爬蟲(chóng)是模擬人類(lèi)請求行為的程序網(wǎng)站。它可以自動(dòng)請求網(wǎng)頁(yè),獲取數據,然后使用一定的規則來(lái)提取有價(jià)值的數據。
專(zhuān)業(yè)介紹:百度百科。
通用爬蟲(chóng)和焦點(diǎn)爬蟲(chóng):
萬(wàn)能爬蟲(chóng):萬(wàn)能爬蟲(chóng)是搜索引擎爬蟲(chóng)系統(百度、谷歌、搜狗等)的重要組成部分。主要是將互聯(lián)網(wǎng)上的網(wǎng)頁(yè)下載到本地,形成互聯(lián)網(wǎng)內容的鏡像備份。
Focused crawler:是一種針對特定需求的網(wǎng)絡(luò )爬蟲(chóng)程序。它與一般爬蟲(chóng)的區別在于:聚焦爬蟲(chóng)在實(shí)現網(wǎng)頁(yè)爬蟲(chóng)時(shí)會(huì )對內容進(jìn)行過(guò)濾處理,并盡量保證只抓取與需求相關(guān)的網(wǎng)頁(yè)信息。.
為什么要用 Python 編寫(xiě)爬蟲(chóng)程序:
PHP:PHP是世界上最好的語(yǔ)言,但他不是天生就干這個(gè)的,而且對多線(xiàn)程、異步支持、并發(fā)處理能力弱等問(wèn)題也不是很好。爬蟲(chóng)是一個(gè)工具程序,對速度和效率的要求很高。
Java:生態(tài)非常完整,是Python爬蟲(chóng)最大的競爭對手。但是Java語(yǔ)言本身很笨重,代碼量很大。重構的成本比較高,任何修改都會(huì )導致代碼的大量變化。爬蟲(chóng)經(jīng)常需要修改 采集 代碼。
C/C++:運行效率無(wú)敵。但學(xué)習和發(fā)展成本很高。寫(xiě)一個(gè)小爬蟲(chóng)可能需要半天以上的時(shí)間。
Python:語(yǔ)法優(yōu)美,代碼簡(jiǎn)潔,開(kāi)發(fā)效率高,支持的模塊多。相關(guān)的HTTP請求模塊和HTML解析模塊非常豐富。還有 Scrapy 和 Scrapy-redis 框架,讓我們開(kāi)發(fā)爬蟲(chóng)變得非常容易。
準備工具:
Python3.6 開(kāi)發(fā)環(huán)境。
Pycharm 2017 專(zhuān)業(yè)版。
虛擬環(huán)境。虛擬環(huán)境/虛擬環(huán)境包裝器。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Pythonampamp//amp管理員;管理員管理員(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 75 次瀏覽 ? 2022-03-03 08:04
python爬蟲(chóng)BeautifulSoup快速抓取網(wǎng)站圖片 Python / Admin 發(fā)表于 1 個(gè)月前 80
本文介紹BeautifulSoup模塊的使用方法和注意事項,幫助您快速了解和學(xué)習BeautifulSoup模塊。有興趣了解爬蟲(chóng)的朋友,快點(diǎn)學(xué)習吧。關(guān)注公眾號獲取爬蟲(chóng)教程。
第一步:了解需求
在開(kāi)始寫(xiě)作之前,我們需要知道我們將要做什么?做爬行動(dòng)物。
搶什么?抓取 網(wǎng)站 圖像。
去哪里搶?zhuān)繄D片之家
可以用這個(gè)網(wǎng)站練手,頁(yè)面比較簡(jiǎn)單。
第 2 步:分析 網(wǎng)站 因素
我們知道需要抓取哪些網(wǎng)站數據,那么我們來(lái)分析一下網(wǎng)站是如何提供數據的。
根據分析,所有頁(yè)面看起來(lái)都一樣,所以我們選擇一張照片給大家演示一下。
1、獲取列表的標題以及鏈接
進(jìn)一步研究頁(yè)面數據,每個(gè)頁(yè)面下面都有一個(gè)列表,然后通過(guò)列表的標題進(jìn)入下一層。然后在這個(gè)頁(yè)面上我們需要獲取列表標題。
2、獲取圖片列表,以及鏈接,翻頁(yè)操作
3、獲取圖片詳情,所有圖片
然后點(diǎn)擊繼續研究,發(fā)現還有更多圖片。
分析完畢,我們來(lái)寫(xiě)代碼。
流程圖如下:
第 3 步:編寫(xiě)代碼以實(shí)現需求
1、導入模塊
導入我們需要使用的所有模塊。
2、獲取列表的標題,以及鏈接
3、獲取類(lèi)別列表標題、鏈接和翻頁(yè)。
4、獲取詳細圖片并保存
知識點(diǎn)總結
學(xué)習本文,可以掌握知識點(diǎn)。
1、掌握 BeautifulSoup
區分find和find_all的用法:find,查找第一個(gè)返回字符串,find_all查找全部,返回一個(gè)列表
區分get和get_text的用法:get獲取標簽中的屬性,get_text獲取標簽包圍的文本。
2、掌握正則,re.findall的使用
3、掌握字符串切片的方式 str[0,-5] 截取第一個(gè)文本到倒數第五個(gè)文本。
4、掌握創(chuàng )建文件夾的方法os.mkdir(name)
5、掌握with open(f, w) as f的用法:
6、掌握requests模塊的get請求方法。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(Pythonampamp//amp管理員;管理員管理員(組圖))
python爬蟲(chóng)BeautifulSoup快速抓取網(wǎng)站圖片 Python / Admin 發(fā)表于 1 個(gè)月前 80
本文介紹BeautifulSoup模塊的使用方法和注意事項,幫助您快速了解和學(xué)習BeautifulSoup模塊。有興趣了解爬蟲(chóng)的朋友,快點(diǎn)學(xué)習吧。關(guān)注公眾號獲取爬蟲(chóng)教程。
第一步:了解需求
在開(kāi)始寫(xiě)作之前,我們需要知道我們將要做什么?做爬行動(dòng)物。
搶什么?抓取 網(wǎng)站 圖像。
去哪里搶?zhuān)繄D片之家
可以用這個(gè)網(wǎng)站練手,頁(yè)面比較簡(jiǎn)單。
第 2 步:分析 網(wǎng)站 因素
我們知道需要抓取哪些網(wǎng)站數據,那么我們來(lái)分析一下網(wǎng)站是如何提供數據的。
根據分析,所有頁(yè)面看起來(lái)都一樣,所以我們選擇一張照片給大家演示一下。
1、獲取列表的標題以及鏈接
進(jìn)一步研究頁(yè)面數據,每個(gè)頁(yè)面下面都有一個(gè)列表,然后通過(guò)列表的標題進(jìn)入下一層。然后在這個(gè)頁(yè)面上我們需要獲取列表標題。
2、獲取圖片列表,以及鏈接,翻頁(yè)操作
3、獲取圖片詳情,所有圖片
然后點(diǎn)擊繼續研究,發(fā)現還有更多圖片。
分析完畢,我們來(lái)寫(xiě)代碼。
流程圖如下:
第 3 步:編寫(xiě)代碼以實(shí)現需求
1、導入模塊
導入我們需要使用的所有模塊。
2、獲取列表的標題,以及鏈接
3、獲取類(lèi)別列表標題、鏈接和翻頁(yè)。
4、獲取詳細圖片并保存
知識點(diǎn)總結
學(xué)習本文,可以掌握知識點(diǎn)。
1、掌握 BeautifulSoup
區分find和find_all的用法:find,查找第一個(gè)返回字符串,find_all查找全部,返回一個(gè)列表
區分get和get_text的用法:get獲取標簽中的屬性,get_text獲取標簽包圍的文本。
2、掌握正則,re.findall的使用
3、掌握字符串切片的方式 str[0,-5] 截取第一個(gè)文本到倒數第五個(gè)文本。
4、掌握創(chuàng )建文件夾的方法os.mkdir(name)
5、掌握with open(f, w) as f的用法:
6、掌握requests模塊的get請求方法。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取今日頭條圖集,老司機以街拍為例(組圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 123 次瀏覽 ? 2022-03-02 15:09
今天,我們來(lái)爬取今日頭條圖集。老司機以街拍為例。
操作平臺:Windows
Python版本:Python3.6
IDE:崇高文本
其他工具:Chrome瀏覽器
1、網(wǎng)頁(yè)分析
從打開(kāi)今日頭條首頁(yè),搜索“街拍”,有“綜合”、“視頻”、“圖集”和“用戶(hù)”四個(gè)標簽,我們依次點(diǎn)擊幾個(gè)標簽,雖然頁(yè)面變了,但是address bar 的 URL 沒(méi)有變化,說(shuō)明頁(yè)面內容是動(dòng)態(tài)加載的。
按“F12”調出開(kāi)發(fā)者工具,刷新頁(yè)面,然后分析開(kāi)發(fā)者工具:
?、伲狐c(diǎn)擊網(wǎng)絡(luò )
?、冢哼x擇XHR
?、郏赫业揭浴?offset=”開(kāi)頭的項目并點(diǎn)擊,右側會(huì )出現詳細信息
?、埽狐c(diǎn)擊右側的“頁(yè)眉”標簽
?、荩翰榭凑埱蠓绞胶驼埱蟮刂?br /> ?、蓿哼@里是請求的參數
接下來(lái)點(diǎn)擊 Preview 選項卡查看返回的數據:
返回的數據格式為json,展開(kāi)“data”字段,展開(kāi)第一項,查找“title”,可以看到和網(wǎng)頁(yè)上第一個(gè)圖集的title一樣,說(shuō)明找到了正確的地方。
繼續分析,在“data”的第一項中有一個(gè)“image_detail”字段。展開(kāi)可以看到 6 個(gè)項目,每個(gè)項目都有一個(gè) url。乍一看,它是圖像 URL。我不知道這是否是我們正在尋找的。復制到瀏覽器打開(kāi)確實(shí)和第一個(gè)縮略圖一樣,那么這6張圖都是圖集的嗎?
點(diǎn)擊網(wǎng)頁(yè)的第一個(gè)圖集,可以看到確實(shí)只有6張圖片,和返回的json數據中的圖片是一致的。
分析完了嗎?我們看看頁(yè)面除了圖片,文字和相關(guān)推薦占了這么多內容,圖片有點(diǎn)小,我們在圖片上右擊選擇“在新標簽頁(yè)打開(kāi)圖片”,注意地址欄:
你發(fā)現其中的奧秘了嗎?圖片地址“l(fā)arge”變成了“origin”,分別保存兩張圖片,對比大小,origin比large大很多,這就是我們需要的,至此,網(wǎng)頁(yè)解析完成,接下來(lái)開(kāi)始編寫(xiě)代碼。
2、代碼
requests 庫用于抓取。由于前面的分析很詳細,代碼不再單獨講解。請看評論。
#-*- 編碼:utf-8 -*-
導入操作系統
重新進(jìn)口
導入json
導入請求
從 urllib.parse 導入 urlencode
def get_one_page(偏移量,關(guān)鍵字):
'''
獲取網(wǎng)頁(yè)html內容并返回
'''
段 = {
'offset': offset, # 搜索結果項從哪里開(kāi)始
'format': 'json', # 返回數據格式
'keyword': 關(guān)鍵字,#要搜索的關(guān)鍵字
'autoload': 'true', # 自動(dòng)加載
'count': 20, # 每次加載結果的項數
'cur_tab': 3, # 當前標簽頁(yè)索引,3為“Atlas”
'from': 'gallery' # 來(lái)源,“畫(huà)廊”
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko)鉻/63.0.3239.132 Safari/537.36'}
網(wǎng)址 = '#39; + urlencode(段落)
嘗試:
# 獲取網(wǎng)頁(yè)內容并以json格式返回數據
響應 = requests.get(url, headers=headers)
# 通過(guò)狀態(tài)碼判斷獲取是否成功
如果 response.status_code == 200:
返回響應.文本
返回無(wú)
除了請求異常:
返回無(wú)
def parse_one_page(html):
'''
解析出群組圖片的URL,返回網(wǎng)頁(yè)中所有圖集的標題和圖片地址
'''
網(wǎng)址 = []
數據 = json.loads(html)
如果 data.keys() 中的數據和“數據”:
對于 data.get('data') 中的項目:
page_urls = []
標題 = item.get('title')
image_detail = item.get('image_detail')
對于我在范圍內(len(image_detail)):
# 獲取大圖地址
url = image_detail[i]['url']
# 替換URL獲取原創(chuàng )高清圖片
url = url.replace('大', '原點(diǎn)')
page_urls.append(url)
urls.append({'title': 標題,'url_list': page_urls})
返回網(wǎng)址
def save_image_file(url, 路徑):
'''
保存圖像文件
'''
ir = requests.get(url)
如果 ir.status_code == 200:
使用 open(path, 'wb') 作為 f:
f.write(ir.content)
f.close()
def main(偏移量,字):
html = get_one_page(偏移量,字)
網(wǎng)址 = parse_one_page(html)
# 如果圖片文件夾不存在則創(chuàng )建
root_path = 單詞
如果不是 os.path.exists(root_path):
os.mkdir(root_path)
對于我在范圍內(len(urls)):
print('---正在下載 %s'%urls[i]['title'])
文件夾 = root_path + '/' + urls[i]['title']
如果不是 os.path.exists(文件夾):
嘗試:
os.mkdir(文件夾)
NotADirectoryError 除外:
繼續
除了 OSError:
繼續
url_list = urls[i]['url_list']
對于范圍內的 j(len(url_list)):
路徑 = 文件夾 + '/index_' + str("d"%j) + '.jpg'
如果不是 os.path.exists(path):
save_image_file(urls[i]['url_list'][j], 路徑)
如果 __name__ == '__main__':
# 抓2000個(gè)圖集,基本上包括所有圖集
對于我在范圍內(100):
main(i*20, '街拍')
您可以根據自己的喜好替換關(guān)鍵詞來(lái)下載您喜歡的圖集。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(爬取今日頭條圖集,老司機以街拍為例(組圖))
今天,我們來(lái)爬取今日頭條圖集。老司機以街拍為例。
操作平臺:Windows
Python版本:Python3.6
IDE:崇高文本
其他工具:Chrome瀏覽器
1、網(wǎng)頁(yè)分析
從打開(kāi)今日頭條首頁(yè),搜索“街拍”,有“綜合”、“視頻”、“圖集”和“用戶(hù)”四個(gè)標簽,我們依次點(diǎn)擊幾個(gè)標簽,雖然頁(yè)面變了,但是address bar 的 URL 沒(méi)有變化,說(shuō)明頁(yè)面內容是動(dòng)態(tài)加載的。
按“F12”調出開(kāi)發(fā)者工具,刷新頁(yè)面,然后分析開(kāi)發(fā)者工具:
?、伲狐c(diǎn)擊網(wǎng)絡(luò )
?、冢哼x擇XHR
?、郏赫业揭浴?offset=”開(kāi)頭的項目并點(diǎn)擊,右側會(huì )出現詳細信息
?、埽狐c(diǎn)擊右側的“頁(yè)眉”標簽
?、荩翰榭凑埱蠓绞胶驼埱蟮刂?br /> ?、蓿哼@里是請求的參數
接下來(lái)點(diǎn)擊 Preview 選項卡查看返回的數據:
返回的數據格式為json,展開(kāi)“data”字段,展開(kāi)第一項,查找“title”,可以看到和網(wǎng)頁(yè)上第一個(gè)圖集的title一樣,說(shuō)明找到了正確的地方。
繼續分析,在“data”的第一項中有一個(gè)“image_detail”字段。展開(kāi)可以看到 6 個(gè)項目,每個(gè)項目都有一個(gè) url。乍一看,它是圖像 URL。我不知道這是否是我們正在尋找的。復制到瀏覽器打開(kāi)確實(shí)和第一個(gè)縮略圖一樣,那么這6張圖都是圖集的嗎?
點(diǎn)擊網(wǎng)頁(yè)的第一個(gè)圖集,可以看到確實(shí)只有6張圖片,和返回的json數據中的圖片是一致的。
分析完了嗎?我們看看頁(yè)面除了圖片,文字和相關(guān)推薦占了這么多內容,圖片有點(diǎn)小,我們在圖片上右擊選擇“在新標簽頁(yè)打開(kāi)圖片”,注意地址欄:
你發(fā)現其中的奧秘了嗎?圖片地址“l(fā)arge”變成了“origin”,分別保存兩張圖片,對比大小,origin比large大很多,這就是我們需要的,至此,網(wǎng)頁(yè)解析完成,接下來(lái)開(kāi)始編寫(xiě)代碼。
2、代碼
requests 庫用于抓取。由于前面的分析很詳細,代碼不再單獨講解。請看評論。
#-*- 編碼:utf-8 -*-
導入操作系統
重新進(jìn)口
導入json
導入請求
從 urllib.parse 導入 urlencode
def get_one_page(偏移量,關(guān)鍵字):
'''
獲取網(wǎng)頁(yè)html內容并返回
'''
段 = {
'offset': offset, # 搜索結果項從哪里開(kāi)始
'format': 'json', # 返回數據格式
'keyword': 關(guān)鍵字,#要搜索的關(guān)鍵字
'autoload': 'true', # 自動(dòng)加載
'count': 20, # 每次加載結果的項數
'cur_tab': 3, # 當前標簽頁(yè)索引,3為“Atlas”
'from': 'gallery' # 來(lái)源,“畫(huà)廊”
}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, 像 Gecko)鉻/63.0.3239.132 Safari/537.36'}
網(wǎng)址 = '#39; + urlencode(段落)
嘗試:
# 獲取網(wǎng)頁(yè)內容并以json格式返回數據
響應 = requests.get(url, headers=headers)
# 通過(guò)狀態(tài)碼判斷獲取是否成功
如果 response.status_code == 200:
返回響應.文本
返回無(wú)
除了請求異常:
返回無(wú)
def parse_one_page(html):
'''
解析出群組圖片的URL,返回網(wǎng)頁(yè)中所有圖集的標題和圖片地址
'''
網(wǎng)址 = []
數據 = json.loads(html)
如果 data.keys() 中的數據和“數據”:
對于 data.get('data') 中的項目:
page_urls = []
標題 = item.get('title')
image_detail = item.get('image_detail')
對于我在范圍內(len(image_detail)):
# 獲取大圖地址
url = image_detail[i]['url']
# 替換URL獲取原創(chuàng )高清圖片
url = url.replace('大', '原點(diǎn)')
page_urls.append(url)
urls.append({'title': 標題,'url_list': page_urls})
返回網(wǎng)址
def save_image_file(url, 路徑):
'''
保存圖像文件
'''
ir = requests.get(url)
如果 ir.status_code == 200:
使用 open(path, 'wb') 作為 f:
f.write(ir.content)
f.close()
def main(偏移量,字):
html = get_one_page(偏移量,字)
網(wǎng)址 = parse_one_page(html)
# 如果圖片文件夾不存在則創(chuàng )建
root_path = 單詞
如果不是 os.path.exists(root_path):
os.mkdir(root_path)
對于我在范圍內(len(urls)):
print('---正在下載 %s'%urls[i]['title'])
文件夾 = root_path + '/' + urls[i]['title']
如果不是 os.path.exists(文件夾):
嘗試:
os.mkdir(文件夾)
NotADirectoryError 除外:
繼續
除了 OSError:
繼續
url_list = urls[i]['url_list']
對于范圍內的 j(len(url_list)):
路徑 = 文件夾 + '/index_' + str("d"%j) + '.jpg'
如果不是 os.path.exists(path):
save_image_file(urls[i]['url_list'][j], 路徑)
如果 __name__ == '__main__':
# 抓2000個(gè)圖集,基本上包括所有圖集
對于我在范圍內(100):
main(i*20, '街拍')
您可以根據自己的喜好替換關(guān)鍵詞來(lái)下載您喜歡的圖集。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度資源平臺官方直播一節公開(kāi)課工作原理及解決辦法(一))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2022-03-01 20:04
大家好,今天百度資源平臺正式開(kāi)課了,主要給大家講一個(gè)網(wǎng)站抓取和收錄的原理,這里我為大家做了詳細的筆記(一個(gè)字不漏),看完后它,可以說(shuō)做收錄基本上問(wèn)題不大。
百度爬蟲(chóng)的工作原理
首先,百度的爬蟲(chóng)會(huì )與網(wǎng)站的首頁(yè)進(jìn)行交互。拿到網(wǎng)站的首頁(yè)后,會(huì )理解頁(yè)面,理解它的收錄(類(lèi)型,值計算),其次,會(huì )把網(wǎng)站的所有超鏈接都提取到首頁(yè)。如下圖所示,首頁(yè)上的超鏈接稱(chēng)為“反向鏈接”。當下一輪爬取發(fā)生時(shí),爬蟲(chóng)會(huì )繼續與這些超鏈接頁(yè)面交互,獲取頁(yè)面進(jìn)行細化,一層一層的繼續爬取。一層抓取,構成抓取環(huán)。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
爬取友好度優(yōu)化
1、網(wǎng)址規范:
任何資源都是通過(guò) URL 抓取的。URL是相對于網(wǎng)站的門(mén)牌號的,所以URL的規劃很重要。尤其如上圖所示,在“待爬取URL”的環(huán)境下,爬蟲(chóng)在首頁(yè)時(shí),并不知道URL長(cháng)什么樣。
優(yōu)秀的網(wǎng)址的特點(diǎn)是主流、簡(jiǎn)潔,可以不做一些非主流的風(fēng)格,讓人看起來(lái)很直觀(guān)的網(wǎng)址。
好的 URL 示例:
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖,第一個(gè)鏈接是百度知道的鏈接。整個(gè)鏈接分為三個(gè)部分。第一段是網(wǎng)站的站點(diǎn),第二段是資源類(lèi)型,第三段是資源的ID。這是一個(gè)非常簡(jiǎn)單且具有爬蟲(chóng)外觀(guān)的高質(zhì)量 URL。
如上圖所示,第三段比百度知道的多一段。首先第一段是網(wǎng)站的站點(diǎn),第二段是站點(diǎn)的一級目錄,第三段是站點(diǎn)的二級目錄,最后一個(gè)段是內容ID網(wǎng)站。像這樣的 URL 也符合標準。
不友好的 URL 示例:
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這種鏈接乍一看很長(cháng)很復雜。有經(jīng)驗的站長(cháng)可以看到,這種網(wǎng)址收錄字符,而這個(gè)網(wǎng)址中收錄文章的標題,導致網(wǎng)址過(guò)長(cháng)。, 與簡(jiǎn)單 URL 相比,長(cháng) URL 并不占優(yōu)勢。百度站長(cháng)平臺規則明確規定網(wǎng)址不能超過(guò)256字節。個(gè)人建議URL長(cháng)度控制在100字節100字符以?xún)?。足夠的資源來(lái)顯示 URL。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,該網(wǎng)址收錄統計參數,可能導致重復爬取,浪費站點(diǎn)權限。因此,不能使用參數。如果必須使用參數,也可以保留必要的參數。參數字符可以使用常規的連接符,如“?”、“&”,避免使用非主流的連接符。
2、合理發(fā)現鏈接:
爬蟲(chóng)從首頁(yè)開(kāi)始逐層爬取,所以需要做好首頁(yè)與資源頁(yè)的URL關(guān)系。這樣,爬行相對來(lái)說(shuō)比較省力。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,從首頁(yè)到具體內容的超鏈接路徑關(guān)系稱(chēng)為發(fā)現鏈接。目前大多數移動(dòng)臺都不太關(guān)注發(fā)現鏈接的關(guān)系,因此爬蟲(chóng)無(wú)法爬取內容頁(yè)面。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這兩個(gè)站點(diǎn)是移動(dòng)網(wǎng)站常用的建站方式。從鏈接發(fā)現的角度來(lái)看,這兩類(lèi)網(wǎng)站并不友好。
Feed流推薦:大部分做Feed流的網(wǎng)站后臺數據很多,用戶(hù)會(huì )不斷刷新新的內容,但是無(wú)論你刷新多少次,可能也只能刷新1%左右內容。爬蟲(chóng)相當于一個(gè)用戶(hù)。爬蟲(chóng)不可能以這種方式爬取網(wǎng)站的所有內容,所以有些頁(yè)面不會(huì )被爬取。就算你有100萬(wàn)的內容,也可能只能搶到1-200萬(wàn)。
只有搜索條目:如上圖所示,首頁(yè)只有一個(gè)搜索框。用戶(hù)需要輸入關(guān)鍵詞才能找到對應的內容,但是爬蟲(chóng)是不可能輸入關(guān)鍵詞再爬的,所以爬蟲(chóng)之后只能爬到首頁(yè),沒(méi)有回鏈,自然爬行和 收錄 不會(huì )是理想的。
解決方法:索引頁(yè)下的內容按發(fā)布時(shí)間倒序排列。這樣做的好處是搜索引擎可以通過(guò)索引頁(yè)面抓取你的網(wǎng)站最新資源。另外,新發(fā)布的資源要實(shí)時(shí)發(fā)布。索引頁(yè)已同步。很多純靜態(tài)的網(wǎng)頁(yè)都更新了內容,但是首頁(yè)(索引頁(yè))還沒(méi)有出來(lái)。這將導致搜索引擎無(wú)法通過(guò)索引頁(yè)面抓取最新的資源。第三點(diǎn)是后鏈(最新文章的URL)需要直接暴露在源碼中,方便搜索引擎抓取。最后,索引頁(yè)越多越好,幾個(gè)優(yōu)質(zhì)的索引頁(yè)就夠了,比如長(cháng)城,基本上只用首頁(yè)作為索引頁(yè)。
最后,這里有一個(gè)更高效的解決方案,就是直接通過(guò)百度站長(cháng)資源平臺主動(dòng)提交資源,讓搜索引擎繞過(guò)索引頁(yè),直接抓取最新資源。這里有兩點(diǎn)需要注意。
Q:是不是提交的資源越多越好?
A:收錄效果的核心永遠是內容的質(zhì)量。如果大量提交低質(zhì)量、超標的資源,就會(huì )造成懲罰性打擊。
問(wèn):為什么我提交了一個(gè)普通的 收錄 卻沒(méi)有被抓到?
A:資源提交只能加速資源發(fā)現,不能保證短時(shí)間內爬取。當然,百度表示,算法不斷優(yōu)化,讓優(yōu)質(zhì)內容被更快抓取。
3、訪(fǎng)問(wèn)友好性:
爬蟲(chóng)需要和網(wǎng)站交互,保證網(wǎng)站的穩定性,爬蟲(chóng)才能正常爬取。那么訪(fǎng)問(wèn)友好性主要包括以下幾個(gè)方面。
訪(fǎng)問(wèn)速度優(yōu)化:建議將加載時(shí)間控制在2S以?xún)?,這樣無(wú)論是用戶(hù)還是爬蟲(chóng)都會(huì )更喜歡打開(kāi)速度更快的網(wǎng)站,二是避免不必要的跳轉,雖然這是很少見(jiàn)的部分,但是有還是網(wǎng)站多級跳轉,所以對于爬蟲(chóng)來(lái)說(shuō),多級跳轉的同時(shí)斷線(xiàn)的可能性很大。常見(jiàn)的做法是先不帶www的域名跳轉到帶WWW的域名,再用帶WWW的域名跳轉到https,最后換一個(gè)新站點(diǎn)。在這種情況下,有三個(gè)或四個(gè)級別的跳躍。如果有類(lèi)似網(wǎng)站的修改,建議直接跳轉到新域名。
標準http返回碼:我們常見(jiàn)的301/302的正確使用,以及404的正確使用,主要是常規問(wèn)題,用常規方法解決,比如遇到無(wú)效資源,那就用404來(lái)做,不要t 使用一些特殊的返回狀態(tài)碼。
訪(fǎng)問(wèn)穩定性?xún)?yōu)化:一是盡量選擇國內規模較大的DNS服務(wù),保證網(wǎng)站的穩定性。對于域名的DNS來(lái)說(shuō),阿里云其實(shí)是比較穩定可靠的,那么二是謹慎使用技術(shù)手段,阻止爬取。如果有特定資源不想在百度上展示,可以使用機器人屏蔽。比如網(wǎng)站的后臺鏈接大多被機器人屏蔽。如果爬取頻率過(guò)高,導致服務(wù)器壓力過(guò)大,影響用戶(hù)正常訪(fǎng)問(wèn),可以通過(guò)資源平臺的工具降低爬取頻率。二是防止防火墻誤攔截爬蟲(chóng)爬取,所以建議可以將搜索引擎的UA加入白名單。最后一點(diǎn)是服務(wù)器的穩定性,尤其是在短時(shí)間內提交大量?jì)?yōu)質(zhì)資源的情況下。這時(shí)候一定要注意服務(wù)器的穩定性,因為當你提交大量資源時(shí),爬蟲(chóng)的數量會(huì )相應增加。這次會(huì )導致您的服務(wù)器出現故障嗎?打開(kāi)壓力太大,這個(gè)問(wèn)題需要站長(cháng)注意。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這三個(gè)例子是第三方防火墻攔截的一種狀態(tài)。普通用戶(hù)打開(kāi)這個(gè)狀態(tài),搜索引擎爬取的時(shí)候也是這個(gè)狀態(tài),所以如果遇到CC或者DDOS,我們在打開(kāi)防火墻之前,必須先釋放搜索引擎的UA。
4、識別百度爬蟲(chóng)
對于一些網(wǎng)站,可能有針對用戶(hù)的特殊優(yōu)化,可能有網(wǎng)站想區分用戶(hù)和爬蟲(chóng)進(jìn)行優(yōu)化,所以這時(shí)候就需要識別百度爬蟲(chóng)了。
編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
首先,通過(guò)一個(gè)簡(jiǎn)單的方法,我們可以通過(guò)百度的UA來(lái)識別百度爬蟲(chóng)。目前百度PC、手機、小程序是三種不同的UA。然后,通過(guò)簡(jiǎn)單的識別方法,就有了第三方UA。爬蟲(chóng)模擬百度爬蟲(chóng),所以你認不出來(lái)。那么這時(shí)候我們就可以通過(guò)雙向DNS解析認證來(lái)區分了。詳情請參考《簡(jiǎn)單兩步:教你快速識別百度蜘蛛》。
提問(wèn)時(shí)間
問(wèn):新網(wǎng)站會(huì )有抓取限制嗎?
A:對于任何新站點(diǎn),都沒(méi)有抓取限制,但是從去年開(kāi)始,我們就開(kāi)始提供對新站點(diǎn)的支持,讓你的網(wǎng)站,首先是收錄上百度。然后做一個(gè)價(jià)值判斷,那么如何讓百度知道你是新站點(diǎn),有兩個(gè)捷徑,一是去百度資源平臺提交,二是去工信部ICP備案,我們可以從工信部得到,從ICP備案的數據,備案后,我們知道有人建了一個(gè)新站點(diǎn),這樣我們就可以為新站點(diǎn)提供基礎的流量支持。
Q:蜘蛛抓取的配額會(huì )針對每個(gè)站點(diǎn)進(jìn)行調整。多久會(huì )調整一次?
A:確實(shí)會(huì )有調整。對于新資源,會(huì )與你的抓取頻率有關(guān),而對于舊資源,會(huì )與你的內容質(zhì)量有關(guān)。如果新資源的質(zhì)量發(fā)生變化,那么爬取頻率也會(huì )發(fā)生變化。網(wǎng)站@如果>的規模發(fā)生變化,爬取的頻率也會(huì )發(fā)生變化。如果有大改版,那么爬取的頻率也會(huì )相對變化。
Q:網(wǎng)站降級可以恢復嗎?
A:網(wǎng)站降級恢復的前提是,我們會(huì )重新評估網(wǎng)站,檢查網(wǎng)站是否已整改,如果有整改,是否404已制作并提交給資源 如果平臺完全符合要求,搜索引擎將在評估后恢復不違反規則的網(wǎng)站。
問(wèn):新網(wǎng)站是否有評估期?
A:對我們來(lái)說(shuō),沒(méi)有評估期這回事。正如我們前面提到的,它可能支持一個(gè)新站點(diǎn)的流量。假設一個(gè)新站點(diǎn)經(jīng)過(guò)1-2個(gè)月的流量支持,發(fā)現網(wǎng)站繼續保持這個(gè)狀態(tài),那么不會(huì )有大的調整。當我們發(fā)現網(wǎng)站的質(zhì)量有明顯提升時(shí),我們也會(huì )相應的提升百度排名。
Q:百度對待國外服務(wù)器和國內服務(wù)器有區別嗎?
A:從戰略上看,沒(méi)有嚴格的區分。不過(guò)很多國外服務(wù)器在中國部分地區封殺了,從國外服務(wù)器網(wǎng)站備案來(lái)看,國內服務(wù)器有優(yōu)勢。
Q:新站點(diǎn)的舊域名是不是更有優(yōu)勢?
A:如果說(shuō)舊域名和新網(wǎng)站是同一個(gè)內容,在初期確實(shí)有一定的優(yōu)勢,但也只是初期,內容的好壞還要看后期. 需要特別注意的是,如果老域名行業(yè)和你的新網(wǎng)站的內容無(wú)關(guān),即使是所謂的高權限老域名也會(huì )適得其反。百度會(huì )覺(jué)得,今天做那個(gè)明天做,效果還不如新建一個(gè)域名。
Q:蜘蛛有重量嗎,比如220、116等高重量蜘蛛?
答:蜘蛛沒(méi)有重量。網(wǎng)站 的排名主要取決于 網(wǎng)站 的質(zhì)量。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(百度資源平臺官方直播一節公開(kāi)課工作原理及解決辦法(一))
大家好,今天百度資源平臺正式開(kāi)課了,主要給大家講一個(gè)網(wǎng)站抓取和收錄的原理,這里我為大家做了詳細的筆記(一個(gè)字不漏),看完后它,可以說(shuō)做收錄基本上問(wèn)題不大。
百度爬蟲(chóng)的工作原理
首先,百度的爬蟲(chóng)會(huì )與網(wǎng)站的首頁(yè)進(jìn)行交互。拿到網(wǎng)站的首頁(yè)后,會(huì )理解頁(yè)面,理解它的收錄(類(lèi)型,值計算),其次,會(huì )把網(wǎng)站的所有超鏈接都提取到首頁(yè)。如下圖所示,首頁(yè)上的超鏈接稱(chēng)為“反向鏈接”。當下一輪爬取發(fā)生時(shí),爬蟲(chóng)會(huì )繼續與這些超鏈接頁(yè)面交互,獲取頁(yè)面進(jìn)行細化,一層一層的繼續爬取。一層抓取,構成抓取環(huán)。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
爬取友好度優(yōu)化
1、網(wǎng)址規范:
任何資源都是通過(guò) URL 抓取的。URL是相對于網(wǎng)站的門(mén)牌號的,所以URL的規劃很重要。尤其如上圖所示,在“待爬取URL”的環(huán)境下,爬蟲(chóng)在首頁(yè)時(shí),并不知道URL長(cháng)什么樣。
優(yōu)秀的網(wǎng)址的特點(diǎn)是主流、簡(jiǎn)潔,可以不做一些非主流的風(fēng)格,讓人看起來(lái)很直觀(guān)的網(wǎng)址。
好的 URL 示例:

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖,第一個(gè)鏈接是百度知道的鏈接。整個(gè)鏈接分為三個(gè)部分。第一段是網(wǎng)站的站點(diǎn),第二段是資源類(lèi)型,第三段是資源的ID。這是一個(gè)非常簡(jiǎn)單且具有爬蟲(chóng)外觀(guān)的高質(zhì)量 URL。
如上圖所示,第三段比百度知道的多一段。首先第一段是網(wǎng)站的站點(diǎn),第二段是站點(diǎn)的一級目錄,第三段是站點(diǎn)的二級目錄,最后一個(gè)段是內容ID網(wǎng)站。像這樣的 URL 也符合標準。
不友好的 URL 示例:

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這種鏈接乍一看很長(cháng)很復雜。有經(jīng)驗的站長(cháng)可以看到,這種網(wǎng)址收錄字符,而這個(gè)網(wǎng)址中收錄文章的標題,導致網(wǎng)址過(guò)長(cháng)。, 與簡(jiǎn)單 URL 相比,長(cháng) URL 并不占優(yōu)勢。百度站長(cháng)平臺規則明確規定網(wǎng)址不能超過(guò)256字節。個(gè)人建議URL長(cháng)度控制在100字節100字符以?xún)?。足夠的資源來(lái)顯示 URL。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,該網(wǎng)址收錄統計參數,可能導致重復爬取,浪費站點(diǎn)權限。因此,不能使用參數。如果必須使用參數,也可以保留必要的參數。參數字符可以使用常規的連接符,如“?”、“&”,避免使用非主流的連接符。
2、合理發(fā)現鏈接:
爬蟲(chóng)從首頁(yè)開(kāi)始逐層爬取,所以需要做好首頁(yè)與資源頁(yè)的URL關(guān)系。這樣,爬行相對來(lái)說(shuō)比較省力。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,從首頁(yè)到具體內容的超鏈接路徑關(guān)系稱(chēng)為發(fā)現鏈接。目前大多數移動(dòng)臺都不太關(guān)注發(fā)現鏈接的關(guān)系,因此爬蟲(chóng)無(wú)法爬取內容頁(yè)面。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這兩個(gè)站點(diǎn)是移動(dòng)網(wǎng)站常用的建站方式。從鏈接發(fā)現的角度來(lái)看,這兩類(lèi)網(wǎng)站并不友好。
Feed流推薦:大部分做Feed流的網(wǎng)站后臺數據很多,用戶(hù)會(huì )不斷刷新新的內容,但是無(wú)論你刷新多少次,可能也只能刷新1%左右內容。爬蟲(chóng)相當于一個(gè)用戶(hù)。爬蟲(chóng)不可能以這種方式爬取網(wǎng)站的所有內容,所以有些頁(yè)面不會(huì )被爬取。就算你有100萬(wàn)的內容,也可能只能搶到1-200萬(wàn)。
只有搜索條目:如上圖所示,首頁(yè)只有一個(gè)搜索框。用戶(hù)需要輸入關(guān)鍵詞才能找到對應的內容,但是爬蟲(chóng)是不可能輸入關(guān)鍵詞再爬的,所以爬蟲(chóng)之后只能爬到首頁(yè),沒(méi)有回鏈,自然爬行和 收錄 不會(huì )是理想的。
解決方法:索引頁(yè)下的內容按發(fā)布時(shí)間倒序排列。這樣做的好處是搜索引擎可以通過(guò)索引頁(yè)面抓取你的網(wǎng)站最新資源。另外,新發(fā)布的資源要實(shí)時(shí)發(fā)布。索引頁(yè)已同步。很多純靜態(tài)的網(wǎng)頁(yè)都更新了內容,但是首頁(yè)(索引頁(yè))還沒(méi)有出來(lái)。這將導致搜索引擎無(wú)法通過(guò)索引頁(yè)面抓取最新的資源。第三點(diǎn)是后鏈(最新文章的URL)需要直接暴露在源碼中,方便搜索引擎抓取。最后,索引頁(yè)越多越好,幾個(gè)優(yōu)質(zhì)的索引頁(yè)就夠了,比如長(cháng)城,基本上只用首頁(yè)作為索引頁(yè)。
最后,這里有一個(gè)更高效的解決方案,就是直接通過(guò)百度站長(cháng)資源平臺主動(dòng)提交資源,讓搜索引擎繞過(guò)索引頁(yè),直接抓取最新資源。這里有兩點(diǎn)需要注意。
Q:是不是提交的資源越多越好?
A:收錄效果的核心永遠是內容的質(zhì)量。如果大量提交低質(zhì)量、超標的資源,就會(huì )造成懲罰性打擊。
問(wèn):為什么我提交了一個(gè)普通的 收錄 卻沒(méi)有被抓到?
A:資源提交只能加速資源發(fā)現,不能保證短時(shí)間內爬取。當然,百度表示,算法不斷優(yōu)化,讓優(yōu)質(zhì)內容被更快抓取。
3、訪(fǎng)問(wèn)友好性:
爬蟲(chóng)需要和網(wǎng)站交互,保證網(wǎng)站的穩定性,爬蟲(chóng)才能正常爬取。那么訪(fǎng)問(wèn)友好性主要包括以下幾個(gè)方面。
訪(fǎng)問(wèn)速度優(yōu)化:建議將加載時(shí)間控制在2S以?xún)?,這樣無(wú)論是用戶(hù)還是爬蟲(chóng)都會(huì )更喜歡打開(kāi)速度更快的網(wǎng)站,二是避免不必要的跳轉,雖然這是很少見(jiàn)的部分,但是有還是網(wǎng)站多級跳轉,所以對于爬蟲(chóng)來(lái)說(shuō),多級跳轉的同時(shí)斷線(xiàn)的可能性很大。常見(jiàn)的做法是先不帶www的域名跳轉到帶WWW的域名,再用帶WWW的域名跳轉到https,最后換一個(gè)新站點(diǎn)。在這種情況下,有三個(gè)或四個(gè)級別的跳躍。如果有類(lèi)似網(wǎng)站的修改,建議直接跳轉到新域名。
標準http返回碼:我們常見(jiàn)的301/302的正確使用,以及404的正確使用,主要是常規問(wèn)題,用常規方法解決,比如遇到無(wú)效資源,那就用404來(lái)做,不要t 使用一些特殊的返回狀態(tài)碼。
訪(fǎng)問(wèn)穩定性?xún)?yōu)化:一是盡量選擇國內規模較大的DNS服務(wù),保證網(wǎng)站的穩定性。對于域名的DNS來(lái)說(shuō),阿里云其實(shí)是比較穩定可靠的,那么二是謹慎使用技術(shù)手段,阻止爬取。如果有特定資源不想在百度上展示,可以使用機器人屏蔽。比如網(wǎng)站的后臺鏈接大多被機器人屏蔽。如果爬取頻率過(guò)高,導致服務(wù)器壓力過(guò)大,影響用戶(hù)正常訪(fǎng)問(wèn),可以通過(guò)資源平臺的工具降低爬取頻率。二是防止防火墻誤攔截爬蟲(chóng)爬取,所以建議可以將搜索引擎的UA加入白名單。最后一點(diǎn)是服務(wù)器的穩定性,尤其是在短時(shí)間內提交大量?jì)?yōu)質(zhì)資源的情況下。這時(shí)候一定要注意服務(wù)器的穩定性,因為當你提交大量資源時(shí),爬蟲(chóng)的數量會(huì )相應增加。這次會(huì )導致您的服務(wù)器出現故障嗎?打開(kāi)壓力太大,這個(gè)問(wèn)題需要站長(cháng)注意。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
如上圖所示,這三個(gè)例子是第三方防火墻攔截的一種狀態(tài)。普通用戶(hù)打開(kāi)這個(gè)狀態(tài),搜索引擎爬取的時(shí)候也是這個(gè)狀態(tài),所以如果遇到CC或者DDOS,我們在打開(kāi)防火墻之前,必須先釋放搜索引擎的UA。
4、識別百度爬蟲(chóng)
對于一些網(wǎng)站,可能有針對用戶(hù)的特殊優(yōu)化,可能有網(wǎng)站想區分用戶(hù)和爬蟲(chóng)進(jìn)行優(yōu)化,所以這時(shí)候就需要識別百度爬蟲(chóng)了。

編輯搜索圖片,請點(diǎn)擊輸入圖片描述(最多18個(gè)字符)
首先,通過(guò)一個(gè)簡(jiǎn)單的方法,我們可以通過(guò)百度的UA來(lái)識別百度爬蟲(chóng)。目前百度PC、手機、小程序是三種不同的UA。然后,通過(guò)簡(jiǎn)單的識別方法,就有了第三方UA。爬蟲(chóng)模擬百度爬蟲(chóng),所以你認不出來(lái)。那么這時(shí)候我們就可以通過(guò)雙向DNS解析認證來(lái)區分了。詳情請參考《簡(jiǎn)單兩步:教你快速識別百度蜘蛛》。
提問(wèn)時(shí)間
問(wèn):新網(wǎng)站會(huì )有抓取限制嗎?
A:對于任何新站點(diǎn),都沒(méi)有抓取限制,但是從去年開(kāi)始,我們就開(kāi)始提供對新站點(diǎn)的支持,讓你的網(wǎng)站,首先是收錄上百度。然后做一個(gè)價(jià)值判斷,那么如何讓百度知道你是新站點(diǎn),有兩個(gè)捷徑,一是去百度資源平臺提交,二是去工信部ICP備案,我們可以從工信部得到,從ICP備案的數據,備案后,我們知道有人建了一個(gè)新站點(diǎn),這樣我們就可以為新站點(diǎn)提供基礎的流量支持。
Q:蜘蛛抓取的配額會(huì )針對每個(gè)站點(diǎn)進(jìn)行調整。多久會(huì )調整一次?
A:確實(shí)會(huì )有調整。對于新資源,會(huì )與你的抓取頻率有關(guān),而對于舊資源,會(huì )與你的內容質(zhì)量有關(guān)。如果新資源的質(zhì)量發(fā)生變化,那么爬取頻率也會(huì )發(fā)生變化。網(wǎng)站@如果>的規模發(fā)生變化,爬取的頻率也會(huì )發(fā)生變化。如果有大改版,那么爬取的頻率也會(huì )相對變化。
Q:網(wǎng)站降級可以恢復嗎?
A:網(wǎng)站降級恢復的前提是,我們會(huì )重新評估網(wǎng)站,檢查網(wǎng)站是否已整改,如果有整改,是否404已制作并提交給資源 如果平臺完全符合要求,搜索引擎將在評估后恢復不違反規則的網(wǎng)站。
問(wèn):新網(wǎng)站是否有評估期?
A:對我們來(lái)說(shuō),沒(méi)有評估期這回事。正如我們前面提到的,它可能支持一個(gè)新站點(diǎn)的流量。假設一個(gè)新站點(diǎn)經(jīng)過(guò)1-2個(gè)月的流量支持,發(fā)現網(wǎng)站繼續保持這個(gè)狀態(tài),那么不會(huì )有大的調整。當我們發(fā)現網(wǎng)站的質(zhì)量有明顯提升時(shí),我們也會(huì )相應的提升百度排名。
Q:百度對待國外服務(wù)器和國內服務(wù)器有區別嗎?
A:從戰略上看,沒(méi)有嚴格的區分。不過(guò)很多國外服務(wù)器在中國部分地區封殺了,從國外服務(wù)器網(wǎng)站備案來(lái)看,國內服務(wù)器有優(yōu)勢。
Q:新站點(diǎn)的舊域名是不是更有優(yōu)勢?
A:如果說(shuō)舊域名和新網(wǎng)站是同一個(gè)內容,在初期確實(shí)有一定的優(yōu)勢,但也只是初期,內容的好壞還要看后期. 需要特別注意的是,如果老域名行業(yè)和你的新網(wǎng)站的內容無(wú)關(guān),即使是所謂的高權限老域名也會(huì )適得其反。百度會(huì )覺(jué)得,今天做那個(gè)明天做,效果還不如新建一個(gè)域名。
Q:蜘蛛有重量嗎,比如220、116等高重量蜘蛛?
答:蜘蛛沒(méi)有重量。網(wǎng)站 的排名主要取決于 網(wǎng)站 的質(zhì)量。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(項目招商找A5快速獲取精準代理名單說(shuō)到SEO)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 69 次瀏覽 ? 2022-03-01 13:16
項目投資找A5快速獲取精準代理商名單
說(shuō)到SEO,沒(méi)有人不熟悉。SEO中文翻譯為Search Engine Optimization,是指通過(guò)優(yōu)化網(wǎng)站來(lái)提高網(wǎng)站的關(guān)鍵詞排名,從而增加公司產(chǎn)品的曝光率。
在這個(gè)互聯(lián)網(wǎng)時(shí)代,很多人在購買(mǎi)新品之前都會(huì )上網(wǎng)查詢(xún)信息,看看哪些品牌的口碑和評價(jià)更好。這個(gè)時(shí)候,排名靠前的產(chǎn)品將占據絕對優(yōu)勢。據調查,87%的網(wǎng)民會(huì )使用搜索引擎服務(wù)尋找自己需要的信息,近70%的搜索者會(huì )直接在搜索結果自然排名的首頁(yè)找到自己需要的信息。
可見(jiàn),目前,SEO對于企業(yè)和產(chǎn)品有著(zhù)不可替代的意義。
關(guān)鍵詞 是重中之重
我們經(jīng)常聽(tīng)到人們談?wù)撽P(guān)鍵詞,但關(guān)鍵詞的具體用途是什么?關(guān)鍵詞是SEO的核心,也是網(wǎng)站在搜索引擎中排名的重要因素。
確定幾個(gè)關(guān)鍵詞對網(wǎng)站流量的提升會(huì )有很大的好處,但必須與網(wǎng)站和產(chǎn)品高度相關(guān)。同時(shí),您可以分析競爭對手的關(guān)鍵詞,從而了解自己和他人。當然,必須有一個(gè)核心關(guān)鍵詞,如果你做的是網(wǎng)站服務(wù),那么你的核心關(guān)鍵詞可以是:網(wǎng)站SEO,網(wǎng)站優(yōu)化;如果是其他產(chǎn)品,可以根據自己的產(chǎn)品或服務(wù)范圍進(jìn)行定位,比如:減肥、保濕、汽車(chē)保養等……
那么長(cháng)尾 關(guān)鍵詞 是什么?顧名思義,它實(shí)際上是一個(gè)比較長(cháng)的關(guān)鍵詞。長(cháng)尾關(guān)鍵詞的搜索量比較小,在企業(yè)文章、軟文中可以適當出現。
需要注意的是,關(guān)鍵詞的密度不能出現太多,但也不能太小。一般3%~6%比較合適。同樣,文章關(guān)鍵詞的文章最好不要出現太多,最好在3~5左右。
外部鏈接也會(huì )影響權重
入鏈也是網(wǎng)站優(yōu)化的一個(gè)很重要的過(guò)程,可以間接影響網(wǎng)站在搜索引擎中的權重。目前常用的鏈接分為:錨文本鏈接、超鏈接、純文本鏈接和圖片鏈接。
我們經(jīng)??吹胶芏嗑W(wǎng)站的地方都會(huì )有友情鏈接,但是隨著(zhù)百度算法的調整,友情鏈接的作用已經(jīng)很小了。目前通過(guò)軟文和圖片傳播鏈接的方法是最科學(xué)的方法,尤其是通過(guò)高質(zhì)量的軟文允許他人轉載傳播網(wǎng)站的外部鏈接,即目前最好的。大大地。
如何被爬蟲(chóng)爬???
爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,比如百度的蜘蛛等。如果想讓你的網(wǎng)站更多的頁(yè)面是收錄,首先要讓網(wǎng)頁(yè)被爬蟲(chóng)抓取.
如果你的網(wǎng)站頁(yè)面更新頻繁,爬蟲(chóng)會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,優(yōu)質(zhì)內容是爬蟲(chóng)喜歡抓取的目標,尤其是原創(chuàng )內容。
如果你嘗試了很多,仍然沒(méi)有被爬蟲(chóng)爬取,可以看看工程師給出的兩個(gè)建議:
1、不建議本站使用js生成主要內容。如果js渲染不正確,可能會(huì )導致頁(yè)面內容讀取錯誤,導致爬蟲(chóng)無(wú)法抓取頁(yè)面。
2、許多網(wǎng)站都將針對爬蟲(chóng)進(jìn)行優(yōu)化。建議頁(yè)面長(cháng)度在128k以?xún)?,不要太長(cháng)。
SEO是用戶(hù)最感興趣的搜索服務(wù),最具有潛在的商業(yè)價(jià)值。這是一項長(cháng)期的工作,不能急于求成。在這個(gè)互聯(lián)網(wǎng)競爭的環(huán)境下,你應該比你的競爭對手多做一點(diǎn)。才有可能獲得質(zhì)的飛躍!
原文由好推建站提供:網(wǎng)站轉載時(shí)須以鏈接形式注明作者、原文出處及本聲明。
申請創(chuàng )業(yè)報告,分享創(chuàng )業(yè)好點(diǎn)子。點(diǎn)擊這里一起討論新的商機! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(項目招商找A5快速獲取精準代理名單說(shuō)到SEO)
項目投資找A5快速獲取精準代理商名單
說(shuō)到SEO,沒(méi)有人不熟悉。SEO中文翻譯為Search Engine Optimization,是指通過(guò)優(yōu)化網(wǎng)站來(lái)提高網(wǎng)站的關(guān)鍵詞排名,從而增加公司產(chǎn)品的曝光率。
在這個(gè)互聯(lián)網(wǎng)時(shí)代,很多人在購買(mǎi)新品之前都會(huì )上網(wǎng)查詢(xún)信息,看看哪些品牌的口碑和評價(jià)更好。這個(gè)時(shí)候,排名靠前的產(chǎn)品將占據絕對優(yōu)勢。據調查,87%的網(wǎng)民會(huì )使用搜索引擎服務(wù)尋找自己需要的信息,近70%的搜索者會(huì )直接在搜索結果自然排名的首頁(yè)找到自己需要的信息。
可見(jiàn),目前,SEO對于企業(yè)和產(chǎn)品有著(zhù)不可替代的意義。
關(guān)鍵詞 是重中之重
我們經(jīng)常聽(tīng)到人們談?wù)撽P(guān)鍵詞,但關(guān)鍵詞的具體用途是什么?關(guān)鍵詞是SEO的核心,也是網(wǎng)站在搜索引擎中排名的重要因素。
確定幾個(gè)關(guān)鍵詞對網(wǎng)站流量的提升會(huì )有很大的好處,但必須與網(wǎng)站和產(chǎn)品高度相關(guān)。同時(shí),您可以分析競爭對手的關(guān)鍵詞,從而了解自己和他人。當然,必須有一個(gè)核心關(guān)鍵詞,如果你做的是網(wǎng)站服務(wù),那么你的核心關(guān)鍵詞可以是:網(wǎng)站SEO,網(wǎng)站優(yōu)化;如果是其他產(chǎn)品,可以根據自己的產(chǎn)品或服務(wù)范圍進(jìn)行定位,比如:減肥、保濕、汽車(chē)保養等……
那么長(cháng)尾 關(guān)鍵詞 是什么?顧名思義,它實(shí)際上是一個(gè)比較長(cháng)的關(guān)鍵詞。長(cháng)尾關(guān)鍵詞的搜索量比較小,在企業(yè)文章、軟文中可以適當出現。
需要注意的是,關(guān)鍵詞的密度不能出現太多,但也不能太小。一般3%~6%比較合適。同樣,文章關(guān)鍵詞的文章最好不要出現太多,最好在3~5左右。
外部鏈接也會(huì )影響權重
入鏈也是網(wǎng)站優(yōu)化的一個(gè)很重要的過(guò)程,可以間接影響網(wǎng)站在搜索引擎中的權重。目前常用的鏈接分為:錨文本鏈接、超鏈接、純文本鏈接和圖片鏈接。
我們經(jīng)??吹胶芏嗑W(wǎng)站的地方都會(huì )有友情鏈接,但是隨著(zhù)百度算法的調整,友情鏈接的作用已經(jīng)很小了。目前通過(guò)軟文和圖片傳播鏈接的方法是最科學(xué)的方法,尤其是通過(guò)高質(zhì)量的軟文允許他人轉載傳播網(wǎng)站的外部鏈接,即目前最好的。大大地。
如何被爬蟲(chóng)爬???
爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,比如百度的蜘蛛等。如果想讓你的網(wǎng)站更多的頁(yè)面是收錄,首先要讓網(wǎng)頁(yè)被爬蟲(chóng)抓取.
如果你的網(wǎng)站頁(yè)面更新頻繁,爬蟲(chóng)會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,優(yōu)質(zhì)內容是爬蟲(chóng)喜歡抓取的目標,尤其是原創(chuàng )內容。
如果你嘗試了很多,仍然沒(méi)有被爬蟲(chóng)爬取,可以看看工程師給出的兩個(gè)建議:
1、不建議本站使用js生成主要內容。如果js渲染不正確,可能會(huì )導致頁(yè)面內容讀取錯誤,導致爬蟲(chóng)無(wú)法抓取頁(yè)面。
2、許多網(wǎng)站都將針對爬蟲(chóng)進(jìn)行優(yōu)化。建議頁(yè)面長(cháng)度在128k以?xún)?,不要太長(cháng)。
SEO是用戶(hù)最感興趣的搜索服務(wù),最具有潛在的商業(yè)價(jià)值。這是一項長(cháng)期的工作,不能急于求成。在這個(gè)互聯(lián)網(wǎng)競爭的環(huán)境下,你應該比你的競爭對手多做一點(diǎn)。才有可能獲得質(zhì)的飛躍!
原文由好推建站提供:網(wǎng)站轉載時(shí)須以鏈接形式注明作者、原文出處及本聲明。
申請創(chuàng )業(yè)報告,分享創(chuàng )業(yè)好點(diǎn)子。點(diǎn)擊這里一起討論新的商機!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(soup爬蟲(chóng)學(xué)習方法總結(一):SQL語(yǔ)句create數據)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 125 次瀏覽 ? 2022-02-28 08:09
獲取響應內容:如果服務(wù)器能正常響應,就會(huì )得到一個(gè)Response。Response的內容就是要獲取的頁(yè)面的內容。響應的內容可能包括 HTML、Json 字符串、二進(jìn)制數據(如圖片和視頻)等。
解析內容:獲取的內容可能是HTML,可以用正則表達式和網(wǎng)頁(yè)解析庫進(jìn)行解析;可能是Json,可以直接轉成Json對象解析;它可能是二進(jìn)制數據,可以保存或進(jìn)一步處理。
保存數據:數據分析完成后保存。既可以存儲為文本文件,也可以存儲在數據庫中。
四、Python 爬蟲(chóng)實(shí)例
爬行動(dòng)物的定義、功能、原理等信息前面已經(jīng)介紹過(guò)了。相信很多小伙伴已經(jīng)開(kāi)始對爬蟲(chóng)產(chǎn)生了興趣,準備嘗試一下?,F在,我們來(lái)“干貨”,直接貼一個(gè)簡(jiǎn)單的Python爬蟲(chóng)代碼:
1.前期準備:安裝Python環(huán)境,安裝PYCHARM軟件,安裝MYSQL數據庫,新建數據庫考試,考試中建表屋,用于存儲爬蟲(chóng)結果【SQL語(yǔ)句:create table house(price varchar ( 88),unit varchar(88),area varchar(88));]
2.爬蟲(chóng)的目標:爬取鏈家租賃網(wǎng)首頁(yè)(url:)中所有房源的價(jià)格、單位、面積,然后將爬蟲(chóng)結構存入數據庫。
3.爬蟲(chóng)源碼:如下
import requests #請求URL頁(yè)面內容
from bs4 import BeautifulSoup #獲取頁(yè)面元素
import pymysql #鏈接數據庫
導入時(shí)間#time函數
import lxml #解析庫(支持HTML\XML解析,支持XPATH解析)
#get_page 功能:通過(guò)requests的get方法獲取url鏈接的內容,然后整合成BeautifulSoup可以處理的格式
def get_page(url):
響應 = requests.get(url)
湯= BeautifulSoup(response.text,'lxml')
回湯
#get_links函數的作用:獲取listing頁(yè)面上的所有出租鏈接
def get_links(link_url):
湯 = get_page(link_url)
links_div = soup.find_all('div',class_="pic-panel")
links=[div.a.get('href') for div in links_div]
返回鏈接
#get_house_info的作用是獲取一個(gè)出租頁(yè)面的信息:價(jià)格、單位、面積等。
def get_house_info(house_url):
湯=get_page(house_url)
價(jià)格 =soup.find('span',class_='total').text
unit = soup.find('span',class_='unit').text.strip()
area = 'test' #這里area字段我們自定義一個(gè)測試進(jìn)行測試
信息 = {
“價(jià)格”:價(jià)格,
“單位”:?jiǎn)挝唬?br /> “區域”:區域
}
返回信息
#數據庫配置信息寫(xiě)入字典
數據庫 = {
'主機': '127.0.0.1',
'數據庫':'考試',
“用戶(hù)”:“根”,
“密碼”:“根”,
'字符集':'utf8mb4'}
#鏈接數據庫
def get_db(設置):
返回 pymysql.connect(**設置)
#將爬蟲(chóng)獲取的數據插入數據庫
定義插入(分貝,房子):
值 = "'{}',"*2 + "'{}'"
sql_values=values.format(house['price'],house['unit'],house['area'])
sql="""
插入房屋(價(jià)格,單位,面積)值({})
""".format(sql_values)
游標 = db.cursor()
cursor.execute(sql)
mit()
#主程序流程:1.連接數據庫2.獲取每個(gè)listing信息的URL列表3.FOR循環(huán)從第一個(gè)URL開(kāi)始獲取具體信息(價(jià)格等)列表的4. 一一插入數據庫
db = get_db(數據庫)
鏈接 = get_links('#39;)
對于鏈接中的鏈接:
時(shí)間.sleep(2)
房子=get_house_info(鏈接)
插入(分貝,房子)
首先,“要想做好工作,必須先利其器”。用 Python 編寫(xiě)爬蟲(chóng)程序也是如此。在編寫(xiě)爬蟲(chóng)的過(guò)程中,需要導入各種庫文件。正是這些及其有用的庫文件幫助我們完成了爬蟲(chóng)。對于大部分工作,我們只需要調用相關(guān)的接口函數即可。導入格式為導入庫文件名。這里需要注意的是,要在PYCHARM中安裝庫文件,可以將光標放在庫文件名上同時(shí)按ctrl+alt鍵安裝庫文件,也可以是通過(guò)命令行安裝(pip安裝庫文件名),如果安裝失敗或者沒(méi)有安裝,后續爬蟲(chóng)肯定會(huì )報錯。在這段代碼中,程序前五行導入相關(guān)庫文件:requests用于請求URL頁(yè)面內容;BeautifulSoup 用于解析頁(yè)面元素;pymysql用于連接數據庫;time 收錄各種時(shí)間函數;lxml是一個(gè)解析庫,用于解析HTML、XML格式文件,也支持XPATH解析。
其次,我們從代碼末尾的主程序來(lái)看整個(gè)爬蟲(chóng)流程:
通過(guò) get_db 函數連接到數據庫。深入get_db函數,可以看到是通過(guò)調用
Pymysql的connect函數用于實(shí)現數據庫的連接。這里的**seting是Python采集關(guān)鍵字參數的一種方式。我們將數據庫的連接信息寫(xiě)入一個(gè)字典DataBase,并將字典中的信息傳遞給connect實(shí)現。參考。
使用get_links函數獲取鏈家首頁(yè)所有房源的鏈接。所有列表的鏈接都以列表的形式存儲在 Links 中。get_links函數首先通過(guò)requests請求獲取鏈家首頁(yè)的內容,然后通過(guò)BeautyfuSoup的接口對內容的格式進(jìn)行整理,轉化為自己可以處理的格式。最后通過(guò)電泳find_all函數找到所有收錄圖片的div樣式,然后用for循環(huán)獲取所有div樣式中收錄的超鏈接標簽(a)的內容(即href屬性的內容),所有超鏈接存儲在列表鏈接中。
通過(guò) FOR 循環(huán),遍歷 links 中的所有鏈接(例如,其中一個(gè)鏈接是:)
使用與2)相同的方法,通過(guò)find函數定位元素,獲取3)中鏈接中的價(jià)格、單位、地區信息,并將這些信息寫(xiě)入字典Info。
調用insert函數,將鏈接中獲取的Info信息寫(xiě)入到數據庫的house表中。深入insert函數可知,它通過(guò)數據庫游標函數cursor()執行一條SQL語(yǔ)句,然后數據庫執行commit操作,實(shí)現響應功能。SQL 語(yǔ)句在這里以一種特殊的方式編寫(xiě)。
給格式化函數格式化,這是為了方便函數的復用。
最后運行爬蟲(chóng)代碼,可以看到鏈家首頁(yè)所有房源信息都寫(xiě)入了數據中。(注:test是我手動(dòng)指定的測試字符串)
后記:其實(shí)Python爬蟲(chóng)并不難。在熟悉了整個(gè)爬取過(guò)程之后,需要注意一些細節,比如如何獲取頁(yè)面元素,如何構造SQL語(yǔ)句等等。遇到問(wèn)題不要慌張,可以通過(guò)查看IDE的提示一一排除bug,最終得到我們期望的結構。
最后:
可以獲取我的個(gè)人V:atstudy-js,可以免費獲取10G軟件測試工程師面試合集文檔。并免費分享對應的視頻學(xué)習教程!,包括基礎知識、Linux要領(lǐng)、Mysql數據庫、抓包工具、接口測試工具、高級測試——Python編程、Web自動(dòng)化測試、APP自動(dòng)化測試、接口自動(dòng)化測試、測試高級持續集成、測試架構開(kāi)發(fā)測試框架,性能測試等
這些測試數據應該是做【軟件測試】的朋友最全面最完整的準備倉庫了。這個(gè)倉庫也陪我走過(guò)了最艱難的旅程,希望也能幫到你! 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(soup爬蟲(chóng)學(xué)習方法總結(一):SQL語(yǔ)句create數據)
獲取響應內容:如果服務(wù)器能正常響應,就會(huì )得到一個(gè)Response。Response的內容就是要獲取的頁(yè)面的內容。響應的內容可能包括 HTML、Json 字符串、二進(jìn)制數據(如圖片和視頻)等。
解析內容:獲取的內容可能是HTML,可以用正則表達式和網(wǎng)頁(yè)解析庫進(jìn)行解析;可能是Json,可以直接轉成Json對象解析;它可能是二進(jìn)制數據,可以保存或進(jìn)一步處理。
保存數據:數據分析完成后保存。既可以存儲為文本文件,也可以存儲在數據庫中。
四、Python 爬蟲(chóng)實(shí)例
爬行動(dòng)物的定義、功能、原理等信息前面已經(jīng)介紹過(guò)了。相信很多小伙伴已經(jīng)開(kāi)始對爬蟲(chóng)產(chǎn)生了興趣,準備嘗試一下?,F在,我們來(lái)“干貨”,直接貼一個(gè)簡(jiǎn)單的Python爬蟲(chóng)代碼:
1.前期準備:安裝Python環(huán)境,安裝PYCHARM軟件,安裝MYSQL數據庫,新建數據庫考試,考試中建表屋,用于存儲爬蟲(chóng)結果【SQL語(yǔ)句:create table house(price varchar ( 88),unit varchar(88),area varchar(88));]
2.爬蟲(chóng)的目標:爬取鏈家租賃網(wǎng)首頁(yè)(url:)中所有房源的價(jià)格、單位、面積,然后將爬蟲(chóng)結構存入數據庫。
3.爬蟲(chóng)源碼:如下
import requests #請求URL頁(yè)面內容
from bs4 import BeautifulSoup #獲取頁(yè)面元素
import pymysql #鏈接數據庫
導入時(shí)間#time函數
import lxml #解析庫(支持HTML\XML解析,支持XPATH解析)
#get_page 功能:通過(guò)requests的get方法獲取url鏈接的內容,然后整合成BeautifulSoup可以處理的格式
def get_page(url):
響應 = requests.get(url)
湯= BeautifulSoup(response.text,'lxml')
回湯
#get_links函數的作用:獲取listing頁(yè)面上的所有出租鏈接
def get_links(link_url):
湯 = get_page(link_url)
links_div = soup.find_all('div',class_="pic-panel")
links=[div.a.get('href') for div in links_div]
返回鏈接
#get_house_info的作用是獲取一個(gè)出租頁(yè)面的信息:價(jià)格、單位、面積等。
def get_house_info(house_url):
湯=get_page(house_url)
價(jià)格 =soup.find('span',class_='total').text
unit = soup.find('span',class_='unit').text.strip()
area = 'test' #這里area字段我們自定義一個(gè)測試進(jìn)行測試
信息 = {
“價(jià)格”:價(jià)格,
“單位”:?jiǎn)挝唬?br /> “區域”:區域
}
返回信息
#數據庫配置信息寫(xiě)入字典
數據庫 = {
'主機': '127.0.0.1',
'數據庫':'考試',
“用戶(hù)”:“根”,
“密碼”:“根”,
'字符集':'utf8mb4'}
#鏈接數據庫
def get_db(設置):
返回 pymysql.connect(**設置)
#將爬蟲(chóng)獲取的數據插入數據庫
定義插入(分貝,房子):
值 = "'{}',"*2 + "'{}'"
sql_values=values.format(house['price'],house['unit'],house['area'])
sql="""
插入房屋(價(jià)格,單位,面積)值({})
""".format(sql_values)
游標 = db.cursor()
cursor.execute(sql)
mit()
#主程序流程:1.連接數據庫2.獲取每個(gè)listing信息的URL列表3.FOR循環(huán)從第一個(gè)URL開(kāi)始獲取具體信息(價(jià)格等)列表的4. 一一插入數據庫
db = get_db(數據庫)
鏈接 = get_links('#39;)
對于鏈接中的鏈接:
時(shí)間.sleep(2)
房子=get_house_info(鏈接)
插入(分貝,房子)
首先,“要想做好工作,必須先利其器”。用 Python 編寫(xiě)爬蟲(chóng)程序也是如此。在編寫(xiě)爬蟲(chóng)的過(guò)程中,需要導入各種庫文件。正是這些及其有用的庫文件幫助我們完成了爬蟲(chóng)。對于大部分工作,我們只需要調用相關(guān)的接口函數即可。導入格式為導入庫文件名。這里需要注意的是,要在PYCHARM中安裝庫文件,可以將光標放在庫文件名上同時(shí)按ctrl+alt鍵安裝庫文件,也可以是通過(guò)命令行安裝(pip安裝庫文件名),如果安裝失敗或者沒(méi)有安裝,后續爬蟲(chóng)肯定會(huì )報錯。在這段代碼中,程序前五行導入相關(guān)庫文件:requests用于請求URL頁(yè)面內容;BeautifulSoup 用于解析頁(yè)面元素;pymysql用于連接數據庫;time 收錄各種時(shí)間函數;lxml是一個(gè)解析庫,用于解析HTML、XML格式文件,也支持XPATH解析。
其次,我們從代碼末尾的主程序來(lái)看整個(gè)爬蟲(chóng)流程:
通過(guò) get_db 函數連接到數據庫。深入get_db函數,可以看到是通過(guò)調用
Pymysql的connect函數用于實(shí)現數據庫的連接。這里的**seting是Python采集關(guān)鍵字參數的一種方式。我們將數據庫的連接信息寫(xiě)入一個(gè)字典DataBase,并將字典中的信息傳遞給connect實(shí)現。參考。
使用get_links函數獲取鏈家首頁(yè)所有房源的鏈接。所有列表的鏈接都以列表的形式存儲在 Links 中。get_links函數首先通過(guò)requests請求獲取鏈家首頁(yè)的內容,然后通過(guò)BeautyfuSoup的接口對內容的格式進(jìn)行整理,轉化為自己可以處理的格式。最后通過(guò)電泳find_all函數找到所有收錄圖片的div樣式,然后用for循環(huán)獲取所有div樣式中收錄的超鏈接標簽(a)的內容(即href屬性的內容),所有超鏈接存儲在列表鏈接中。
通過(guò) FOR 循環(huán),遍歷 links 中的所有鏈接(例如,其中一個(gè)鏈接是:)
使用與2)相同的方法,通過(guò)find函數定位元素,獲取3)中鏈接中的價(jià)格、單位、地區信息,并將這些信息寫(xiě)入字典Info。
調用insert函數,將鏈接中獲取的Info信息寫(xiě)入到數據庫的house表中。深入insert函數可知,它通過(guò)數據庫游標函數cursor()執行一條SQL語(yǔ)句,然后數據庫執行commit操作,實(shí)現響應功能。SQL 語(yǔ)句在這里以一種特殊的方式編寫(xiě)。
給格式化函數格式化,這是為了方便函數的復用。
最后運行爬蟲(chóng)代碼,可以看到鏈家首頁(yè)所有房源信息都寫(xiě)入了數據中。(注:test是我手動(dòng)指定的測試字符串)

后記:其實(shí)Python爬蟲(chóng)并不難。在熟悉了整個(gè)爬取過(guò)程之后,需要注意一些細節,比如如何獲取頁(yè)面元素,如何構造SQL語(yǔ)句等等。遇到問(wèn)題不要慌張,可以通過(guò)查看IDE的提示一一排除bug,最終得到我們期望的結構。
最后:
可以獲取我的個(gè)人V:atstudy-js,可以免費獲取10G軟件測試工程師面試合集文檔。并免費分享對應的視頻學(xué)習教程!,包括基礎知識、Linux要領(lǐng)、Mysql數據庫、抓包工具、接口測試工具、高級測試——Python編程、Web自動(dòng)化測試、APP自動(dòng)化測試、接口自動(dòng)化測試、測試高級持續集成、測試架構開(kāi)發(fā)測試框架,性能測試等
這些測試數據應該是做【軟件測試】的朋友最全面最完整的準備倉庫了。這個(gè)倉庫也陪我走過(guò)了最艱難的旅程,希望也能幫到你!
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢)
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 65 次瀏覽 ? 2022-02-26 19:04
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢,不知道能不能用requests抓取下來(lái)。
哈哈~個(gè)人更推薦使用flask相對于python自帶的那些功能它基本上都有對于web爬蟲(chóng)我更喜歡flask,用起來(lái)也簡(jiǎn)單而且python本身沒(méi)有這方面的框架,還是跟著(zhù)別人學(xué)吧上面那個(gè)寫(xiě)爬蟲(chóng)的寫(xiě)的的很清楚,
首先你要確定你是想要抓取哪些圖片網(wǎng)站的圖片。網(wǎng)站上的爬蟲(chóng)是不是有對圖片url地址進(jìn)行針對性地查找,然后發(fā)現該網(wǎng)站上已經(jīng)有圖片。一般的爬蟲(chóng)能力沒(méi)有那么強大。推薦用蜘蛛程序爬下來(lái),進(jìn)行一個(gè)下載工作?;蛘邎D片搜索工具對圖片信息進(jìn)行爬取。
據我所知微信公眾號圖文消息的接口不能爬取圖片,你可以選擇把那個(gè)接口轉換成抓取類(lèi),直接抓取。
我目前用了兩個(gè)微信公眾號的接口,一個(gè)搜,一個(gè)推。其中公眾號搜是圖片接口,可以抓取其它地方的,比如說(shuō)我的知乎。
建議使用像flask這種pythonweb框架,
額,我剛接觸爬蟲(chóng)沒(méi)多久,目前采用圖片鏈接去抓取微信文章的圖片,剛開(kāi)始學(xué),
可以用戶(hù)工具箱
我也試了各種方式都沒(méi)成功好煩人
實(shí)在不行就編寫(xiě)個(gè)爬蟲(chóng)程序
這些微信公眾號都會(huì )放一些免費圖片的鏈接供爬取,但是僅限原創(chuàng )文章。 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢)
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片試試?頁(yè)面加載有點(diǎn)慢,不知道能不能用requests抓取下來(lái)。
哈哈~個(gè)人更推薦使用flask相對于python自帶的那些功能它基本上都有對于web爬蟲(chóng)我更喜歡flask,用起來(lái)也簡(jiǎn)單而且python本身沒(méi)有這方面的框架,還是跟著(zhù)別人學(xué)吧上面那個(gè)寫(xiě)爬蟲(chóng)的寫(xiě)的的很清楚,
首先你要確定你是想要抓取哪些圖片網(wǎng)站的圖片。網(wǎng)站上的爬蟲(chóng)是不是有對圖片url地址進(jìn)行針對性地查找,然后發(fā)現該網(wǎng)站上已經(jīng)有圖片。一般的爬蟲(chóng)能力沒(méi)有那么強大。推薦用蜘蛛程序爬下來(lái),進(jìn)行一個(gè)下載工作?;蛘邎D片搜索工具對圖片信息進(jìn)行爬取。
據我所知微信公眾號圖文消息的接口不能爬取圖片,你可以選擇把那個(gè)接口轉換成抓取類(lèi),直接抓取。
我目前用了兩個(gè)微信公眾號的接口,一個(gè)搜,一個(gè)推。其中公眾號搜是圖片接口,可以抓取其它地方的,比如說(shuō)我的知乎。
建議使用像flask這種pythonweb框架,
額,我剛接觸爬蟲(chóng)沒(méi)多久,目前采用圖片鏈接去抓取微信文章的圖片,剛開(kāi)始學(xué),
可以用戶(hù)工具箱
我也試了各種方式都沒(méi)成功好煩人
實(shí)在不行就編寫(xiě)個(gè)爬蟲(chóng)程序
這些微信公眾號都會(huì )放一些免費圖片的鏈接供爬取,但是僅限原創(chuàng )文章。
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一第一時(shí)間解決?(圖))
網(wǎng)站優(yōu)化 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 93 次瀏覽 ? 2022-02-26 15:20
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看
1. 概述
本文主要實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),目的是從百度貼吧頁(yè)面下載圖片。下載圖片的步驟如下:
(1)獲取網(wǎng)頁(yè)的html文本內容;
(2)分析html中圖片的html標簽特征,使用正則解析得到所有圖片url鏈接的列表;
(3)根據圖片的url鏈接列表將圖片下載到本地文件夾。
2. urllib+re 實(shí)現
<p>1#!/usr/bin/python
2# coding:utf-8
3# 實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),爬取百度貼吧圖片
4import urllib
5import re
6# 根據url獲取網(wǎng)頁(yè)html內容
7def getHtmlContent(url):
8 page = urllib.urlopen(url)
9
10return page.read()
11# 從html中解析出所有jpg圖片的url
12# 百度貼吧html中jpg圖片的url格式為:XXX.jpg
13def getJPGs(html):
14# 解析jpg圖片url的正則
15 jpgReg = re.compile(r' 查看全部
網(wǎng)頁(yè)爬蟲(chóng)抓取百度圖片(想要學(xué)習Python?有問(wèn)題得不到第一第一時(shí)間解決?(圖))
想學(xué) Python?遇到無(wú)法第一時(shí)間解決的問(wèn)題?來(lái)這里看看“1039649593”滿(mǎn)足你的需求,資料已經(jīng)上傳到文件中,你可以自己下載!還有大量2020最新的python學(xué)習資料。
點(diǎn)擊查看

1. 概述
本文主要實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),目的是從百度貼吧頁(yè)面下載圖片。下載圖片的步驟如下:
(1)獲取網(wǎng)頁(yè)的html文本內容;
(2)分析html中圖片的html標簽特征,使用正則解析得到所有圖片url鏈接的列表;
(3)根據圖片的url鏈接列表將圖片下載到本地文件夾。
2. urllib+re 實(shí)現
<p>1#!/usr/bin/python
2# coding:utf-8
3# 實(shí)現一個(gè)簡(jiǎn)單的爬蟲(chóng),爬取百度貼吧圖片
4import urllib
5import re
6# 根據url獲取網(wǎng)頁(yè)html內容
7def getHtmlContent(url):
8 page = urllib.urlopen(url)
9
10return page.read()
11# 從html中解析出所有jpg圖片的url
12# 百度貼吧html中jpg圖片的url格式為:XXX.jpg
13def getJPGs(html):
14# 解析jpg圖片url的正則
15 jpgReg = re.compile(r'