Python網路爬蟲實戰小專案
爬取目標:美女網的相關資訊
實現時需要用到的包:
- requests庫
- Beautifulsoup
- time
- json
值得注意的是 Beautifulsoup 在bs4裡 ,記得pip install bs4 安裝一下
目標分析:
-
從頁面中找出需要資訊的位置
很容易找到 class="content-box " 這個屬性就是我們需要資訊的位置,然後注意右下角的箭頭,很明顯這個標籤屬性是唯一的,看得出第一頁就是10張圖片,有了這個資訊,我們就可以進一步分析所需要的具體資料。
-
從找到的資訊裡篩選出需要的具體資訊
在上一步的基礎上進一步分析,很明顯姓名和圖片地址資訊在img標籤裡的 alt 和 src 中。
由圖上箭頭看得出,姓名、生日、和故鄉可以在 class="posts-text"裡找到,現在所需要的資訊就已經都找到了,接下來就是獲取怎麼獲取下一頁的連結。
-
分析怎麼獲取下一頁
由於下一頁是個按鈕,因此只能分析獲取介面,由圖可知是個POST請求,有form表單,且仔細觀察可知箭頭指的地方 paged 對應的就是頁數,因此我們只需要發起一個POST請求獲取響應物件即可。
注意 :此處獲取的響應物件有一個坑,並不能直接獲取到html,需要進一步處理! 詳細情況會在程式碼中通過註釋說明!!
程式碼實現:
import json
import time
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3823.400 QQBrowser/10.7.4307.400',
'Cookie': 'aQQ_ajkguid=B4D4C2CC-2F46-D252-59D7-83356256A4DC; id58=e87rkGBclxRq9+GOJC4CAg==; _ga=GA1.2.2103255298.1616680725; 58tj_uuid=4b56b6bf-99a3-4dd5-83cf-4db8f2093fcd; wmda_uuid=0f89f6f294d0f974a4e7400c1095354c; wmda_new_uuid=1; wmda_visited_projects=%3B6289197098934; als=0; cmctid=102; ctid=15; sessid=E454865C-BA2D-040D-1158-5E1357DA84BA; twe=2; isp=true; _gid=GA1.2.1192525458.1617078804; new_uv=4; obtain_by=2; xxzl_cid=184e09dc30c74089a533faf230f39099; xzuid=7763438f-82bc-4565-9fe8-c7a4e036c3ee'
}
def get(url): # 獲取網頁
resp = requests.get(url, headers=headers)
if resp.status_code == 200:
parse(resp.text)
else:
print('網頁請求失敗!')
def parse(html): # 進行資料解析
items = {}
root = BeautifulSoup(html, 'lxml')
content_boxs = root.select('.content-box')
for content_box in content_boxs: # 遍歷content_box標籤,以獲得需要的資訊
img = content_box.find('img')
items['name'] = img.attrs.get('alt')
infos = content_box.select('.posts-text')[0].get_text() # 獲取到的是一個列表,取出該元素並獲取其文字
try:
items['birthday'] = infos.split('/')[1].strip()[3:] # 進行字串切割獲取到生日資訊
items['city'] = infos.split('/')[2].strip()[3:]
except:
items['birthday'] = ''
items['city'] = ''
items['cover'] = img.attrs.get('src')
itempipeline(items) # 傳給itempipeline()進行資料處理
# 載入下一頁
get_next_page('http://www.meinv.hk/wp-admin/admin-ajax.php')
def itempipeline(item): # 此處沒做任何處理,直接列印
print(item)
page = 2
def get_next_page(url):
time.sleep(1) # 休息一秒,避免請求過於頻繁引起的限制請求
global page
resp = requests.post(url, data={
"total": 4,
"action": "fa_load_postlist",
"paged": page, # 由之前分析可知,此處是頁碼
"tag": "%e9%9f%a9%e5%9b%bd%e7%be%8e%e5%a5%b3",
"wowDelay": "0.3s"
}, headers=headers)
page += 1
if page > 5: # 這次爬取的總共就34個(網頁上有顯示),一頁10個, 5頁足夠
print('獲取完畢!')
exit()
resp.encoding = 'utf-8' # 指定其編碼方式為utf-8
if resp.status_code == 200:
# 此處就是坑!!!!!
# 獲取到的是json字典,但字典前面有干擾,需要進行切片獲取
# 進行切片後,其html檔案是在 key為postlist的裡面
rec = json.loads(resp.text[1:])['postlist']
parse(rec) # 將其傳給parse()進行解析
else:
print('下一頁連結獲取失敗!')
if __name__ == '__main__':
get('http://www.meinv.hk/?tag=%e9%9f%a9%e5%9b%bd%e7%be%8e%e5%a5%b3')
爬取結果展示:
相關文章
- Python網路爬蟲實戰專案大全!Python爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- 最新《30小時搞定Python網路爬蟲專案實戰》Python爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 網路爬蟲(python專案)爬蟲Python
- 專案--python網路爬蟲Python爬蟲
- Python網路爬蟲實戰Python爬蟲
- 2019最新《網路爬蟲JAVA專案實戰》爬蟲Java
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- 視訊教程-Python網路爬蟲開發與專案實戰-PythonPython爬蟲
- 精通 Python 網路爬蟲:核心技術、框架與專案實戰Python爬蟲框架
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 網路爬蟲專案爬蟲
- python網路爬蟲_Python爬蟲:30個小時搞定Python網路爬蟲視訊教程Python爬蟲
- python3網路爬蟲開發實戰_Python 3開發網路爬蟲(一)Python爬蟲
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- 乾貨分享!Python網路爬蟲實戰Python爬蟲
- Python 3網路爬蟲開發實戰Python爬蟲
- Python爬蟲小專案:爬一個圖書網站Python爬蟲網站
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲專案實戰(一)爬蟲
- 爬蟲實戰專案合集爬蟲
- Python爬蟲開發與專案實戰pdfPython爬蟲
- Python爬蟲開發與專案實戰(2)Python爬蟲
- Python爬蟲開發與專案實戰(1)Python爬蟲
- python網路爬蟲--專案實戰--scrapy嵌入selenium,晶片廠級聯評論爬取(6)Python爬蟲晶片
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- Python網路爬蟲實戰(一)快速入門Python爬蟲
- Python3網路爬蟲開發實戰Python爬蟲
- [Python3網路爬蟲開發實戰] 分散式爬蟲原理Python爬蟲分散式
- 2019最新崔慶才python3網路爬蟲開發專案實戰(完整)Python爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- 爬蟲小專案爬蟲