使用BeautifulSoup爬虫
爬蟲剛入門,用BeautifulSoup來練手。
本篇文章前提是安裝好了BeautifulSoup、requests模塊,還需要內置的os模塊。
爬取的網址為:http://www.itcast.cn/channel/teacher.shtml#ajavaee
?
然后就是基本的爬取操作:
ul = 'http://www.itcast.cn/channel/teacher.shtml#ajavaee' html = requests.get(ul).text main_url = 'http://www.itcast.cn' # print(html) soup = BeautifulSoup(html, 'lxml') img_ul = soup.find_all('div', {'class': 'li_img'})這里要注意一點,得到的img_ul類型是ResultSet,意思是標簽,并不是正兒八經的字符串。有興趣的朋友可以print一下或者debug看看結果。
需要 注意的是,因為分析網頁的時候發現,圖片網址和當前網頁的網址不完全相同,故增加了一個main_url,以備下面的讀取圖片網址用。
此時,網頁已經變成了一碗美味的“湯汁”。右鍵圖片審查元素可得到圖片的對應的代碼:
審查網頁?
可以看到圖片的網頁并不是設置的“ul”,正好解釋了第二步。接著創建一個文件夾準備“收貨”。
os.makedirs('./傳播智客/', exist_ok=True) # 在當前程序的文件夾下創建一個“傳播智客”的文件夾關于os的用法,可以參考各種基礎教程。
因為這碗湯里啥都有,想吃的肉還得自己找。所以下一步就是找到圖片網址對應的代碼:
for ul in img_ul:imgs = ul.find_all('img')# print(imgs)for img in imgs:url = img['data-original']img_name = url.split('/')[-1]req = requests.get(main_url+url, stream=True)with open('./傳播智客/%s' % img_name, 'wb') as f:for chunk in req.iter_content(chunk_size=128):f.write(chunk)print('Saved %s' % img_name)那么提取里面的內容就需要用到關鍵字標簽,如上代碼所示。
本來打算用正則表達式“re.findall(xxxx)”提取網址,結果報錯了。所以就沒用到re模塊。
這一段是跟??莫煩?學的。普通方法就是把所有的圖片下載到內存里,再一個個存到電腦的硬盤上。對于少量的數據還可行,對于本例子也可行,但想想如果要爬一個20G 的視頻呢?內存恐怕要被撐爆。這種方法說白了就是邊下邊存,本例子中,下載滿128byte即存到硬盤上,然后再下再存。chunk_size=xx即定義了滿多少字節存一次。
結果:
完整版代碼:
import requests from bs4 import BeautifulSoup import osul = 'http://www.itcast.cn/channel/teacher.shtml#ajavaee' html = requests.get(ul).text main_url = 'http://www.itcast.cn' # print(html) soup = BeautifulSoup(html, 'lxml') img_ul = soup.find_all('div', {'class': 'li_img'})os.makedirs('./傳播智客/', exist_ok=True)for ul in img_ul:imgs = ul.find_all('img')# print(imgs)for img in imgs:url = img['data-original']img_name = url.split('/')[-1]req = requests.get(main_url+url, stream=True)with open('./傳播智客/%s' % img_name, 'wb') as f:for chunk in req.iter_content(chunk_size=128):f.write(chunk)print('Saved %s' % img_name)?
總結
以上是生活随笔為你收集整理的使用BeautifulSoup爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django查询表记录的十三种方法
- 下一篇: 提效工具git的基本使用