05 如何在知乎上自动互粉、商品上架提醒、拉勾网职位提醒

任务

image.png

问题拆解



# Windows版的代码请在这下载:https://video.mugglecode.com/net5.py
# 以下为Mac/Linux/可在麻瓜编程在线运行的代码:

from selenium import webdriver
import time

# 运行前先下载 chrome driver,下载地址是:https://sites.google.com/a/chromium.org/chromedriver/downloads,点击【Latest Release: ChromeDriver x.xx】进入下载

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,点击【我的主页】→【关注者】可进入该页面
    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()')

商品上架提醒这一部分需要考虑的是样品的标签名称。另外pyautogui库里面的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!')

拉勾网职位提醒

其实爬取的时候面向对象还是面向过程, 这个代码可以来对比一下的。
面向过程的时候呢:


面向过程

面向对象可以看做是面向过程的一种扩展,也是一种比较友好的形式。


面向对象
# 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
            #本来这个浏览器应该打开就处理,但是也可以一次性网页都加载完再挨个处理,这个可以存内容的。,
            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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容

  • 炫耀运行成果 每次在知乎回答完一个问题,增加的粉丝数量都是翻好几页也看不完的。 但其实也很想知道有没有小 V 甚至...
    麻瓜编程阅读 877评论 0 1
  • 作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www...
    nnngu阅读 332评论 0 0
  • 虽然放假了,可每天都过得很充实。孩子早上醒了就开始完成自己的练习,完成后去洗脸,吃早饭。然后我们向明德书城出发...
    十月的抄手阅读 220评论 0 1
  • 回中女郎,面无彷徨, 无暇红妆,最爱武装, 最美丽 回中女郎! 令尊令堂,右臂左膀 缠绵病床,远离侧旁 最不孝回中...
    我是骄阳似火阅读 350评论 5 4
  • 小隐隐于野,大隐隐于市。 聂隐,如一个隐身人般透明的存在,她也想过出人头地,她也想过脱颖而出,怎奈想,一直这样隐于...
    一枝茱萸阅读 579评论 0 0