python編程爬蟲,python簡單爬蟲代碼-用Python編寫一個簡單的爬蟲

 2023-11-18 阅读 27 评论 0

摘要:作者信息: python編程爬蟲。Author : 黃志成(小黃) 博客地址: 博客 爬蟲python的爬取步驟,吶,這是一篇福利教程.為什么這么說呢.我們要爬取的內容是美圖網站(嘿嘿,老司機都懂的) 廢話不多說.開始今天的表演. 這個圖集網站不要問我怎么來的.絕對不是我刻

作者信息:

python編程爬蟲。Author : 黃志成(小黃)

博客地址: 博客

爬蟲python的爬取步驟,吶,這是一篇福利教程.為什么這么說呢.我們要爬取的內容是美圖網站(嘿嘿,老司機都懂的)

廢話不多說.開始今天的表演.

這個圖集網站不要問我怎么來的.絕對不是我刻意找的.(其實是看了別的發的一篇文章,就想自己動手實現一下)

1460000013953664?w=891&h=696

我們今天的任務就是 將這些圖集保存下來。

首先我們需要獲取到所有的列表,我們往下拉動滾動條,拉到底,會繼續自動加載內容,我們通過瀏覽器的NetWork可以發現請求的數據包

1460000013953665?w=1194&h=742

我們來分析一下這個數據包

URL:https://www.toutiao.com/search_content/?offset=0&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=20&cur_tab=3&from=gallery

通過url我們可以知道幾個重要的參數

offset 偏移量

count 數量

cur_tab 當前分類

這里很多朋友可能對偏移量不太了解,這里我用sql語句表示一下,如果了解sql的朋友 肯定就知道了

mysql> SELECT * FROM art LIMIT offset , count

mysql> SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15

mysql> SELECT * FROM table LIMIT 95,1; // 檢索記錄行 96

這里我每次讀取一條,對一條進行操作.

URL:https://www.toutiao.com/search_content/?offset=1&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery

每次對offset 進行自增即可了

我們點擊進去 看看數據的結構.

1460000013953666?w=909&h=791

我們需要獲取到該圖集的鏈接。

進入這篇圖集,在NetWork中并沒有發現圖集有關的請求接口,可能也是混排的.

我們可以查看頁面的源碼

1460000013953667?w=1438&h=720

原來真的是混排的寫法.看了一下這里用到vue.具體怎么實現的我們不去探討了,我們只需要取出數據即可。

那如何取出呢? 提供兩種方法,一種就是正則,一種就是自己寫一個取文本的函數.這里我用第二種作為演示,下面是取文本的函數.

def txt_wrap_by(start_str, end, html):

start = html.find(start_str)

if start >= 0:

start += len(start_str)

end = html.find(end, start)

if end >= 0:

return html[start:end].strip()

我們取出 JSON.parse("") 中的數據

觀察數據,可以發現 我們取出 url 就可以了,這里的數據是json但是被轉義了,我們就通過正則取出吧

1460000013953668?w=693&h=482

正則的語法如圖上,最后我也會放出所有代碼滴,大家放心.

然后保存為圖片即可~

上面說的都是思路,最后放出代碼~

import requests,os,json,re,datetime

# 主函數

def main():

foreach_art_list()

def foreach_art_list():

# 判斷目錄下是否存在jilv.txt文件 如果存在則讀取里面的數值

if os.path.exists('./jilv.txt'):

f = open('./jilv.txt')

n = f.read()

n = int(n)

f.close()

else:

n = 1

while True:

url = 'http://www.toutiao.com/search_content/?offset=' + str(n) + '&format=json&keyword=%E6%B8%85%E7%BA%AF%E7%BE%8E%E5%A5%B3&autoload=true&count=1&cur_tab=3&from=gallery'

re = requests.get(url)

data = re.json()['data']

if not data:

break

# 運行圖片下載函數

download_pic(data[0]['article_url'],n)

n = n+1

# 將n寫入文件 防止程序運行出錯 可以繼續運行

with open('./jilv.txt', 'w') as f:

f.write(str(n))

def download_pic(url,n):

download_pic_url = 'http://p3.pstatp.com/'

# 這里必須帶上協議頭,否則會請求失敗

header = {

'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'

}

res = requests.get(url,headers = header)

content = res.text

img_list_json = txt_wrap_by('gallery: JSON.parse("','"),',content)

# 正則獲取所有的uri

img_list = re.findall(r'uri\":\"(.*?)\"',img_list_json)

#判斷是否有此目錄

if 'img' not in os.listdir('.'):

os.mkdir('./img')

if str(n) not in os.listdir('./img'):

os.mkdir('./img/'+str(n))

for v in img_list:

img_path = download_pic_url + v

img_path = img_path.replace("\", "")

# 讀取圖片

atlas = requests.get(img_path).content

# 保存圖片

with open( './img/' + str(n) + '/' + str(datetime.datetime.now()) +'.jpg', 'wb') as f: # 把圖片寫入文件內

f.write(atlas)

# 取出兩個文本之間的內容

def txt_wrap_by(start_str, end, html):

start = html.find(start_str)

if start >= 0:

start += len(start_str)

end = html.find(end, start)

if end >= 0:

return html[start:end].strip()

# 運行程序

main()

最后 展示一下 運行結果:

1460000013953669

1460000013953670?w=586&h=356

這個程序還有許多不完善的地方,我會在之后教程加入 redis 和 多線程 的寫法,讓他成為最快的爬蟲~

敬請期待~ 今天就到這里了. 又是周末!祝大家周末愉快。嘿嘿~ 看我的美圖去了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/176732.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息