任務(wù)
image.png
問題拆解
# Windows版的代碼請(qǐng)?jiān)谶@下載:https://video.mugglecode.com/net5.py
# 以下為Mac/Linux/可在麻瓜編程在線運(yùn)行的代碼:
from selenium import webdriver
import time
# 運(yùn)行前先下載 chrome driver,下載地址是:https://sites.google.com/a/chromium.org/chromedriver/downloads缩筛,點(diǎn)擊【Latest Release: ChromeDriver x.xx】進(jìn)入下載
def start_chrome():
driver = webdriver.Chrome(executable_path='./chromedriver') # Windows 需寫成'./chromedriver.exe'
driver.start_client()
return driver
def find_strangers():
# btn
btn_sel = 'div.ContentItem-extra > button.Button--blue'
elems = driver.find_elements_by_css_selector(btn_sel)
return elems
def add_fren():
pass
while True:
url = 'https://www.zhihu.com/'
follower_url = 'https://www.zhihu.com/people/xxx/followers' #需替換成你的知乎url,點(diǎn)擊【我的主頁】→【關(guān)注者】可進(jìn)入該頁面
driver = start_chrome()
driver.get(url)
if not driver.get_cookies():
push()
time.sleep(20)
# wait login
driver.get(follower_url)
time.sleep(6) # wait for loading page & users
strangers = find_strangers()
for s in strangers:
s.click()
time.sleep(3)
print('Done!')
time.sleep(3000)
# js_execute('xxx.click()')
商品上架提醒這一部分需要考慮的是樣品的標(biāo)簽名稱堡称。另外pyautogui庫(kù)里面的alert方法可以提醒瞎抛。
from selenium.webdriver import Chrome
import pyautogui
import webbrowser
import time
class PageObserver:
def __init__(self, url, target_sel):
self.driver = Chrome(executable_path='./chromedriver')
self.url = url
self.target_sel = target_sel
self.request_time = 20
#self.driver.find_elements_by_css_selector(self.target_sel)
def is_changed(self):
self.driver.get(self.url)
time.sleep(self.request_time)
oos_el = self.driver.find_elements_by_css_selector(self.target_sel)
buy_button = self.driver.find_elements_by_id('update-cart')
# -> []
print(oos_el)
print(buy_button)
if not oos_el and buy_button:
return True
def alert():
pyautogui.alert('The bag is available')
# find changes
url = 'https://www.strathberry.com/products/east-west-mini-tri-colour-navy-ruby-vanilla'
target_sel = 'div.oos.swatch-container.swatch-3-colours.active-colour'
fake_url = 'https://www.strathberry.com/products/east-west-mini-black-with-eyelets'
fake_target_sel = 'oss.swatch-container.swatch-1-colours.active-colour'
target = PageObserver(url=fake_url, target_sel=fake_target_sel)
while True:
if target.is_changed():
alert()
webbrowser.open(fake_url)
target.driver.close()
else:
print('Nope!')
拉勾網(wǎng)職位提醒
其實(shí)爬取的時(shí)候面向?qū)ο筮€是面向過程, 這個(gè)代碼可以來對(duì)比一下的却紧。
面向過程的時(shí)候呢:
面向過程
面向?qū)ο罂梢钥醋鍪敲嫦蜻^程的一種擴(kuò)展桐臊,也是一種比較友好的形式。
面向?qū)ο?/div>
# get_page() -> parse_page() -> filter_job() -> send()
'''
raw_html = []
for i in range(1, 30):
page = get_page()
raw_html.append(page)
all_jobs = []
for html in raw_html:
jobs = parse(html)
all_jobs.append(jobs)
for job in all_jobs:
result = filter_job(job)
if result:
send(job)
'''
# Spider -> Parser -> Job
'''
s = Spider()
raw_pages = s.crawl(url)
p = Parser(raw_pages)
jobs = p.get_jobs()
for j in jobs:
if j.is_today():
j.send_to_me()
'''
from selenium.webdriver import Chrome
from bs4 import BeautifulSoup
import time
# https://www.lagou.com/zhaopin/qukuailian/12/
class Spider:
def __init__(self, index_url, page_range):
self.page_range = page_range + 1
self.index_url = index_url
self.raw_pages = []
self.boot()
def boot(self):
self.chrome = Chrome(executable_path='./chromedriver')
self.chrome.start_client()
def crawl(self):
for num in range(1, self.page_range):
full_url = f'{self.index_url}{num}/'
self.chrome.get(full_url)
print('Wait for loading page')
time.sleep(3)
single_html = self.chrome.page_source
#本來這個(gè)瀏覽器應(yīng)該打開就處理晓殊,但是也可以一次性網(wǎng)頁都加載完再挨個(gè)處理断凶,這個(gè)可以存內(nèi)容的。巫俺,
self.raw_pages.append(single_html)
print('Done')
class Parser:
def __init__(self, raw_pages):
self.raw_pages = raw_pages
self.jobs = []
self.parse()
def parse(self):
for html in self.raw_pages:
soup = BeautifulSoup(html, 'html.parser') #這里注意是html.parser
time_sel = 'ul span.format-time'
comp_sel = 'ul .company_name > a'
link_sel = 'ul a.position_link'
time_els = soup.select(time_sel) # list
comp_els= soup.select(comp_sel) # list
link_els= soup.select(link_sel) # list
for t,c,l in zip(time_els, comp_els, link_els):
cell = { #字典方便查詢
'time':t.text,
'comp':c.text,
'link':l.get('href')
}
self.jobs.append(cell)
# [{},{}]
def get_jobs(self):
return [Job(j) for j in self.jobs]
class Job:
def __init__(self,data):
self.time = data.get('time')
self.comp = data.get('comp')
self.link = data.get('link')
def is_today(self):
return ':' in self.time # -> T or F
def send(self):
pass
def save_into_csv(self):
pass
s = Spider(
index_url='https://www.lagou.com/zhaopin/qukuailian/',
page_range=2
)
s.crawl()
p = Parser(s.raw_pages)
jobs = p.get_jobs()
for j in jobs:
if j.is_today():
print(j.comp,j.link)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門舌镶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豪娜,你說我怎么就攤上這事餐胀。” “怎么了瘤载?”我有些...
- 文/不壞的土叔 我叫張陵否灾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我鸣奔,道長(zhǎng)墨技,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任挎狸,我火速辦了婚禮扣汪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锨匆。我一直安慰自己崭别,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茅主,像睡著了一般舞痰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暗膜,一...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼炬丸!你這毒婦竟也來了瘫寝?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤稠炬,失蹤者是張志新(化名)和其女友劉穎焕阿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體首启,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡暮屡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毅桃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褒纲。...
- 正文 年R本政府宣布彻秆,位于F島的核電站,受9級(jí)特大地震影響结闸,放射性物質(zhì)發(fā)生泄漏掖棉。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一膀估、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耻讽,春花似錦察纯、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽香伴。三九已至,卻和暖如春具则,著一層夾襖步出監(jiān)牢的瞬間即纲,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓匪凡,卻偏偏與公主長(zhǎng)得像膊畴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子病游,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 炫耀運(yùn)行成果 每次在知乎回答完一個(gè)問題唇跨,增加的粉絲數(shù)量都是翻好幾頁也看不完的。 但其實(shí)也很想知道有沒有小 V 甚至...
- 作者:nnngu GitHub:https://github.com/nnngu 博客園:http://www...
- 雖然放假了衬衬,可每天都過得很充實(shí)买猖。孩子早上醒了就開始完成自己的練習(xí),完成后去洗臉滋尉,吃早飯玉控。然后我們向明德書城出發(fā)...
- 回中女郎,面無彷徨兼砖, 無暇紅妝奸远,最愛武裝, 最美麗 回中女郎讽挟! 令尊令堂懒叛,右臂左膀 纏綿病床,遠(yuǎn)離側(cè)旁 最不孝回中...