前面學習了基本的爬取理論,在pycharm虛拟環境下通過Python爬取網絡資料,可以通過BeautifulSoup、re正則和selenium三種基本方法。現在輪到了将三種基本方法融合到一起的時候,知識在小腦袋中彙集爆炸的時刻。
1、自定義爬蟲子產品
跟随教材的講解步伐,首先自定義一個爬蟲子產品,将三種方法都融合在一起,代碼如下:
'''
自定義子產品,将BeautifulSoup,re和selenium組合在一起
'''
import requests, re, time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
class Spider():
def __init__(self, url=None, headers=None):
self.url = url
self.headers=headers
def requests_getHtmlSource(self):
try:
r = requests.get(self.url,headers=self.headers)
r.raise_for_status()
html=r.text
except:
html = "error"
return html
def beautifulsoup_getTarget(self,selector=None,attrs=None):
soup = BeautifulSoup(self.requests_getHtmlSource(),'html.parser')
resultset = soup.select(selector)
res = [item.text for item in resultset]
return res
def re_getTarget(self, pattern=None, flag=None):
targetPattern = re.compile(pattern, flags=flag)
res = targetPattern.findall(self.requests_getHtmlSource)
return res
def selenium_scrapy(self, selector=None):
chrome = webdriver.Chrome()
chrome.implicitly_wait(3)
chrome.get(self.url)
target_elements = chrome.find_elements(By.CSS_SELECTOR, 'selector')
res = [item.text for item in target_elements]
return res
代碼簡單解釋如下:
①引入requests、re、time、BeautifulSoup、selenium等各類庫資源;
②定義一個spider的類,類裡面包含了url解析器、以及Beautisoup、re和se三種方法。
③每種方法标明具體的解決步驟和路徑;
編寫代碼感悟與心得
①這是個相對比較長的代碼,整合了過去接近10天時間之内學習的各種方法,因為過去10天中學習的過程比較痛苦,是以心裡對這個代碼也是感覺比較痛苦
②不痛苦不提高,是以還是硬着頭皮敲下來,然後嘗試運作,針對出現的問題再去找對應的解決方法;
③有些問題現在還是解決不了的,是以期待後面的學習中越來越熟練,越來越深入了解,才能解決問題;
這次代碼編寫遇到的坑
①定義類之後,下面的def定義函數中,忘記縮進,導緻我無法引用這些功能,在記憶中沒有形成固定的習慣,是以耽誤了一些時間;
②類名的字元越多,越容易出錯,且在子產品中無法找到問題所在,需要在代碼和子產品之間來回轉換查找問題。
2、通過自定義子產品來爬取百度熱點搜尋資訊
當自定義子產品編寫好并儲存後,在同一檔案夾下建立新的檔案,編寫百度熱點搜尋的爬取資料,代碼就變的很簡潔,輸入了url,header和cookie資訊,然後調用自定義子產品中的必要功能就可以實作快速爬取資料了。
遇到的困難還是在調試過程中,會出現前後編寫代碼不一緻的錯誤。
然後通過不同的selector路徑來看看可以爬取出來哪些資料,嗯~~~不一樣的體驗和感受
代碼如下:
import easySpider
url='https://top.baidu.com/board?tab=realtime'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36','Cookie':'BIDUPSID=41B961C6932938AE85BAE812C44E8D00; PSTM=1689907158; BAIDUID=41B961C6932938AE8CFD8399CFFF4CD0:FG=1; BAIDUID_BFESS=41B961C6932938AE8CFD8399CFFF4CD0:FG=1; ZFY=FbRdQaHa:AblVHbbvvAvODL4X9gn5JePCEFfA6:Bbi:Ad0:C'}
baiduHot=easySpider.Spider(url=url,headers=headers)
Hotlist=baiduHot.beautifulsoup_getTarget(selector='#sanRoot > main > div.container.right-container_2EFJr > div > div:nth-child(2)')
for item in Hotlist:
print(item)
3、通過自定義子產品來爬取京東每日特價資訊
又一個自定義子產品的運用,找到爬取内容的selector路徑之後,調用自定義子產品中的必要功能。具體代碼如下,就不再贅述了。
import easySpider
url='https://miaosha.jd.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36','Cookie':'__jdv=76161171|direct|-|none|-|1690083196765; __jdu=16900831967651748726393; 3AB9D23F7A4B3CSS=jdd03XUWL5YG35AVZC5CQ2FKMO3C5OWPRJL4CIBWBJNA74KPCWKD4LGJDKMSEPMZI52MC5IPYDIQ2CTXCP4W3XYD4Q2CM3AAAAAMJQDHQGZAAAAAADCPVLTZWR7TGFMX; _gia_d=1; areaId=19; ipLoc-djd=19-1666-0-0; PCSYCityID=CN_440000_440600_0; shshshfpa=76accaa1-2d7e-4146-a4f3-def1404bfda1-1690083198; shshshfpx=76accaa1-2d7e-4146-a4f3-def1404bfda1-1690083198; shshshsID=dc10b6304b6ae3d564b94177c4d9507f_1_1690083198586; shshshfpb=dk17sHozAiQSirtJ4itpJJA; __jda=122270672.16900831967651748726393.1690083197.1690083197.1690083197.1; __jdb=122270672.2.16900831967651748726393|1.1690083197; __jdc=122270672; 3AB9D23F7A4B3C9B=XUWL5YG35AVZC5CQ2FKMO3C5OWPRJL4CIBWBJNA74KPCWKD4LGJDKMSEPMZI52MC5IPYDIQ2CTXCP4W3XYD4Q2CM3A'}
jdSpecial=easySpider.Spider(url=url,headers=headers)
goodslist=jdSpecial.selenium_scrapy(selector='#J-superkillGoodslist > li:nth-child(1)')
pricelist=jdSpecial.selenium_scrapy(selector='#J-superkillGoodslist > li:nth-child(1) > div > span > span.seckill_mod_goods_price > i')
for goods,price in zip(goodslist,pricelist):
print(goods,price)
#加油!
#一點一滴的努力,未來都會有回報。
#歲月靜好,不去羨慕旁人,隻做好自己,花朵總會綻放。
#以上學習感悟來自于《網絡爬蟲進化論:從Excel爬蟲到Python爬蟲》(中國水利水電出版社2021年出版)