日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫自学之第(③)篇——实战:requests+BeautifulSoup实现静态爬取

發(fā)布時間:2023/12/10 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫自学之第(③)篇——实战:requests+BeautifulSoup实现静态爬取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題外話:

《Pi Network 免費挖礦國外熱門項目 一個π幣大約值3元到10元》相信過去BTC的人,信不信未來的PI,了解一下,唯一一個高度與之持平的項目

?

前篇全片都是生硬的理論使用,今天就放個靜態(tài)爬取的實例讓大家體驗一下BeautifulSoup的使用,了解一些背后的原理。

順便在這引入靜態(tài)網(wǎng)頁的概念——靜態(tài)網(wǎng)頁是指一次性加載所有內(nèi)容的網(wǎng)頁,爬蟲一次請求便能得到所有信息,對爬蟲非常友好,適合練手

?

豆瓣top250電影信息爬取


?

我們來爬取每部電影的圖片,名稱,導演演員,類型,評分,和它的一句話總結(jié),

繼續(xù)對<li>標簽進行分析,又發(fā)現(xiàn)信息又在<div class="info">標簽里,而這標簽只存在于<li>標簽中,其它地方不存在,這樣可以用find_all()方法把他們?nèi)糠蛛x出來。

這里不選擇<li>標簽是它沒有唯一性,電影以外的內(nèi)容也有<li>標簽。



布置好偽裝后就可以開始根據(jù)每個<div class="info">標簽進行信息篩選了:

  • 圖片鏈接是<div class="info">的上上個兄弟標簽<div class="pic">的孫子<img>的src屬性的值
  • 電影名有多個,都在<div class="hd">標簽里,用get_text()把它們串起來
  • 導演演員是<p class>標簽的第一段字符串
  • 類型是<p class>標簽的第二段字符串
  • 評分和評分人數(shù)都在<div class="star">標簽里,又用get_text()串起來
  • 一句話總結(jié)直屬于<span class="inq">標簽
  • html中的&NBSP(實際上是小寫,這里大寫避免markdown識別)對應字符串中的\xa0,可用replace方法替換掉

?

url = 'https://movie.douban.com/top250' headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'} r=requests.get(url,headers=headers) soup = BeautifulSoup(r.text,'lxml')for each in soup.find_all('div',class_='info'):img_url = each.previous_sibling.previous_sibling.a.img['src']#圖片鏈接'''with open('*.jpg','wb') as img:#還可以順便下載回來,名字自起img.write(requests.get(img_url,headers=headers).content)'''title=each.find('div',class_='hd').get_text(strip=True).replace('\xa0','')#標題actor = list(each.find('p',class_='').strings)[0].strip().replace('\xa0','')#導演演員type_ = list(each.find('p',class_='').strings)[1].strip().replace('\xa0','')#類型score = each.find('div',class_='star').get_text('/',strip=True)#評分及人數(shù)quote = each.find('span',class_='inq').string#一句話總結(jié)print([img_url,title,actor,type_,score,quote])#這里只簡單打出來看下,怎樣存儲由你來決定

但是這樣只有25部電影啊,是的,'https://movie.douban.com/top250'指向第一頁,我們現(xiàn)在只爬了一頁,其實還有9頁還沒爬啊,這是就要構(gòu)造網(wǎng)址了。

??我們點到第二頁,發(fā)現(xiàn)網(wǎng)址變成了https://movie.douban.com/top2...,第三頁start條件值變成50,我們可以得出結(jié)論,每下一頁,start條件值就加25。第一頁start=0,第二頁start=25.....第十頁start=225。這樣就可以循環(huán)構(gòu)造網(wǎng)頁并爬取了,這交給讀者實現(xiàn)
??下面筆者提供另一種思路:網(wǎng)頁不是有下一頁的按鈕嗎,右鍵檢查一下,發(fā)現(xiàn)它已經(jīng)包含了要構(gòu)造的部分了,是一個屬性值,提取出來接到原網(wǎng)址上即得到下一頁的網(wǎng)址,這樣能完全爬取所有頁數(shù),不用像上面一樣設置循環(huán)次數(shù)。

?

貼上完整代碼

import requests from bs4 import BeautifulSoupurl = 'https://movie.douban.com/top250' with open('douban.txt', 'w', encoding='utf-8') as f:while url:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}r = requests.get(url, headers=headers)soup = BeautifulSoup(r.text, 'lxml')for each in soup.find_all('div', class_='info'):img_url = each.previous_sibling.previous_sibling.a.img['src']title=each.find('div', class_='hd').get_text(strip=True).replace('\xa0', '')actor = list(each.find('p', class_='').strings)[0].strip().replace('\xa0', '')#將生成器list化后索引,strip()去除兩邊空格再用空字符替換&nbsptype_ = list(each.find('p', class_='').strings)[1].strip().replace('\xa0', '')score = each.find('div', class_='star').get_text('/', strip=True)if each.find('span', class_='inq'):#注意有部電影沒有總結(jié),也就沒有<span class="inq">標簽這里用if檢測一下防止None使用string方法報錯quote = each.find('span', class_='inq').stringelse:quote = '沒有總結(jié)哦'print([img_url, title, actor, type_, score, quote])try:#到最后一頁時沒有下一頁按鈕,會報TypeError,這時用try語句讓url=None使while循環(huán)停止url = 'https://movie.douban.com/top250' + soup.find('span', class_='next').a['href']except TypeError:url = None

本實例的篩選方法已經(jīng)講的很細致了,幾乎提及了BeautifulSoup的所有方法,希望大家能通過此實例能加深對BeautifulSoup的理解,然后自己手打一些爬蟲出來,小的十幾行多的幾十行都可以,爬貼吧什么的都可以。

還是那句話“只看不實踐的程序員不是好程序員

下一篇應該會將正則表達式,更加強大也更加難的信息匹配方法
下下篇了解一下動態(tài)爬取?

總結(jié)

以上是生活随笔為你收集整理的Python爬虫自学之第(③)篇——实战:requests+BeautifulSoup实现静态爬取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。