情人節,你剛表白,而我已經開始選哪裡拍婚紗照了~

2021-02-21 CSDN

又到每年的 2 月 14 日了,最近這幾天,你肯定會在博客上看到,程式設計師花式秀恩愛,但橡皮擦就不一樣了,正在幫別人選婚紗照拍攝地。

當你 new 出來的對象問你,「北京在哪拍婚紗照便宜又好呀?」 你啪啪啪把數據展示出來,絕對可以贏得你的小可愛那愛戀的眼神。

寫在前面挖掘目的已經確定,下面就是挖掘代碼編寫的時間了,作為年輕人,好好秀恩愛吧,苦差事就交給我們這些過來人。這次咱們的目標網站是:https://www.jiehun.com.cn/,遙想當年橡皮擦的婚紗照還是在婚博會上訂的呢~這個組織在每年春夏秋冬四季在北京、上海、廣州、天津、武漢、杭州、成都等地同時舉辦大型結婚展。
我們要抓取的就是上面商鋪的各種信息,包含商鋪名,商鋪地址,評星,點評數,價格。

數據抓取過程在做正式抓取之前,可以先編寫一個 demo,對數據進行簡單的抓取與解析,具體實現可以參照下文。其中用到了 XPath 解析,該網站如果不使用 UA 參數,無法獲取到數據,也算是一種最簡單的反爬手段吧。
def demo():    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"}    url = f"https://www.jiehun.com.cn/beijing/ch2065/store-p13/?ce=beijing"    content = r.get(url, headers=headers).text    html = etree.HTML(content)    li_list = html.xpath("//div[@id='stlist']/ul/li")    for li in li_list:                star = li.xpath("./div[@class='comment']/p[1]/b/text()")        comment = "--"        if star:                        star = star[0]            comment = li.xpath("./div[@class='comment']/p[2]/a/text()")                        comment = comment[0]        else:            star = "--"
name = li.xpath(".//a[@class='namelimit']/text()")[0] store = li.xpath( ".//div[@class='storename']/following-sibling::p[1]/text()")[0] price = li.xpath( ".//div[@class='storename']/following-sibling::p[2]/span[1]/text()") if price: price = li.xpath( ".//div[@class='storename']/following-sibling::p[2]/span[1]/text()")[0] else: price = "--" item = { "name": name, "store": store, "price": price, "star": star, "comment": comment } print(item)
with open("hun.json", "ab+") as filename: filename.write(json.dumps( item, ensure_ascii=False).encode("utf-8") + b"\n")

獲取到的數據存儲格式如下,以 JSON 格式存儲,讀取的時候每次讀取一行即可。
{"name": "9Xi·婚紗攝影", "store": "商家地址:北京市朝陽區朝外大街丙10號9Xi結婚匯購物中心", "price": "¥4999", "star": "--", "comment": "--"}{"name": "非目環球旅拍", "store": "商家地址:杭州市濱江區非目影像(總店)", "price": "¥19800", "star": "--", "comment": "--"}{"name": "小白工作室(私人會所)", "store": "商家地址:朝陽北路天鵝灣北區7號樓二單元502(朝陽大悅城對面)", "price": "--", "star": "--", "comment": "--"}{"name": "朵美婚拍", "store": "商家地址:北京市朝陽區廣渠門外大街8號優士閣A座大堂底商", "price": "¥2999", "star": "--", "comment": "--"}{"name": "柏悅時尚藝術館", "store": "商家地址:立湯路186號龍德廣場四層F420A", "price": "--", "star": "--", "comment": "--"}

當測試數據抓取到之後,就可以對全北京的商鋪(其他地區的修改對應地址即可)進行批量抓取了,本次數據量雖然不大,但是橡皮擦依舊為你貼心的準備了多線程爬蟲(唉~沒那麼容易學習到爬蟲技術)。以下是完整代碼部分,就為了你能獲取到最全的數據,一次性的把代碼都提供給你了,你的手指可以放在點讚按鈕上,為橡皮擦點讚了。
import threadingimport requests as rfrom queue import Queueimport timefrom lxml import etreeimport json
CRAWL_EXIT = FalsePARSE_EXIT = False

class ThreadCrawl(threading.Thread): def __init__(self, thread_name, page_queue, data_queue): super(ThreadCrawl, self).__init__()
self.thread_name = thread_name self.page_queue = page_queue self.data_queue = data_queue self.headers = { "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"}
def run(self): print("啟動", self.thread_name) while not CRAWL_EXIT: try: page = self.page_queue.get(False) url = f"https://www.jiehun.com.cn/beijing/ch2065/store-p{page}/?ce=beijing"
content = r.get(url, headers=self.headers).text time.sleep(1)
self.data_queue.put(content)
except Exception as e: print(e)
print("結束", self.thread_name)

class ThreadParse(threading.Thread): def __init__(self, thread_name, data_queue, filename, lock): super(ThreadParse, self).__init__() self.thread_name = thread_name self.data_queue = data_queue self.filename = filename self.lock = lock
def run(self): print("啟動", self.thread_name) while not PARSE_EXIT: try: html = self.data_queue.get(False)
self.parse(html)
except Exception as e: print(e) print("結束", self.thread_name)
def parse(self, html): html = etree.HTML(html)
li_list = html.xpath("//div[@id='stlist']/ul/li") for li in li_list: star = li.xpath("./div[@class='comment']/p[1]/b/text()") comment = "--" if star: star = star[0] comment = li.xpath("./div[@class='comment']/p[2]/a/text()") comment = comment[0] else: star = "--"
name = li.xpath(".//a[@class='namelimit']/text()")[0] store = li.xpath( ".//div[@class='storename']/following-sibling::p[1]/text()")[0] price = li.xpath( ".//div[@class='storename']/following-sibling::p[2]/span[1]/text()") if price: price = li.xpath( ".//div[@class='storename']/following-sibling::p[2]/span[1]/text()")[0] else: price = "--"
item = { "name": name, "store": store, "price": price, "star": star, "comment": comment }
with self.lock: self.filename.write(json.dumps( item, ensure_ascii=False).encode("utf-8") + b"\n")

def main(): page_queue = Queue(14) for i in range(1, 15): page_queue.put(i)
data_queue = Queue() filename = open("hun.json", "ab+")
lock = threading.Lock()
crawl_list = ["挖掘線程1", "挖掘線程2", "挖掘線程3"]
threadcrawl = [] for thread_name in crawl_list: thread = ThreadCrawl(thread_name, page_queue, data_queue) thread.start() threadcrawl.append(thread)
parse_list = ["解析線程1", "解析線程2", "解析線程3"] threadparse = [] for thread_name in parse_list: thread = ThreadParse(thread_name, data_queue, filename, lock) thread.start() threadparse.append(thread)
while not page_queue.empty(): pass
global CRAWL_EXIT CRAWL_EXIT = True
print("page_queue為空") for thread in threadcrawl: thread.join() print("挖掘隊列執行完畢")

while not data_queue.empty(): pass global PARSE_EXIT PARSE_EXIT = True
for thread in threadparse: thread.join() print("解析隊列執行完畢")
with lock: filename.close()

本次數據獲取,為了不讓你那麼容易就找到哪個商鋪價錢便宜,我專門存儲成了 JSON 格式,排序的工作就交給你自己來完成了。畢竟你不能有女朋友的同時,一點力也不出吧。


看圖選照
你以為這樣工作就做完了嗎?當然沒有,除了價格以外,咱們 new 出來的對象還需要看圖選呢,至少要看看誰家拍攝技術高,更符合自己的調調。

第一個步驟批量採集圖片詳情頁的地址;

第二步針對詳情頁地址,獲取圖片。

def demo():    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"}    url = f"https://www.jiehun.com.cn/beijing/ch2065/album-p461/?attr_110=&cate_id=2065&ce=beijing"    content = r.get(url, headers=headers).text    html = etree.HTML(content)    a_list = html.xpath("//div[@class='rectangle_list']/ul/li/a/@href")
for a in a_list: with open("album_link.json", "a+") as filename:            filename.write(f"https://www.jiehun.com.cn/{a}\n")

短暫運行一段時間後,得到超連結數據如下:

https://www.jiehun.com.cn//album/730704/https://www.jiehun.com.cn//album/730703/https://www.jiehun.com.cn//album/730702/https://www.jiehun.com.cn//album/730701/https://www.jiehun.com.cn//album/730700/https://www.jiehun.com.cn//album/730699/https://www.jiehun.com.cn//album/730698/https://www.jiehun.com.cn//album/730697/https://www.jiehun.com.cn//album/730696/https://www.jiehun.com.cn//album/730695/https://www.jiehun.com.cn//album/730694/https://www.jiehun.com.cn//album/730693/https://www.jiehun.com.cn//album/730679/

圖片抓取,利用 album_link.json 中存儲的連結地址,解析對應頁面中的 img 標籤。讀取 album_link.json 中的數據,生成待抓取連結。
def read_file():    page_queue = Queue()    for f in open("album_link.json","r"):        print(f.strip())        page_queue.put(f)
print(page_queue.qsize())

def demo():    headers = {        "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36"}    url = f"https://www.jiehun.com.cn/album/730698/"    content = r.get(url, headers=headers).text    html = etree.HTML(content)    title = html.xpath("//div[@class='detailintro_l']/h2/text()")[0]    img_list = html.xpath("//div[@class='img']/img/@src")
for index,img_url in enumerate(img_list): content = r.get(img_url, headers=headers).content with open(f"./imgs/{title}-{index}.jpg", "wb+") as filename: filename.write(content)

編寫好完整的代碼之後,等著照片存儲到本地,就可以給對象一張張的看了,看到好的,在查一下是哪個攝影店,去拍攝就好了。


代碼運行一會,就 600+ 照片了,因為硬碟比較小,剩下的大家自己爬取吧

其實是被那一張張狂撒狗糧的照片,餵飽了~,ε=(´ο `*))) 唉,那一張張 KISS 照片,一直在給橡皮擦暴擊。

☞「面向對象就是一個錯誤!」

相關焦點

  • 結婚登記照,婚紗照,是真愛就免費拍!
    周總理給妻子的信件裡寫道:「你的信太過官方,都不說想我。」夏目漱石則說:「今晚月色很美。」在《生活大爆炸》裡,謝耳朵表白的時候說:「我從未想過有一天會與人結婚,所以我能找到你簡直就是奇蹟了,這就好比找到暗物質,你是比暗物質更美好的存在。」
  • 一般情人節送什麼好,情人節表白禮物推薦
    情人節,製造浪漫的方法就是向女生表白,下面就和TellLove求婚策劃公司一起來看看在情人節送什麼禮物好吧。,然後關掉所有的電燈,在蠟燭之下,說出你的愛情誓言,讓蠟燭去見證你們兩個人的愛情。一般情人節送什麼好:玫瑰花比較常見的表白禮物,玫瑰花。
  • 情人節表白賀卡電子版在線製作免費
    懂事的男生已經在準備情人節禮物了,不懂事的還不知道大年初三是什麼日子
  • 【情人節表白】情人節有哪些浪漫的表白方式,情人節表白方式分享
    情人節有哪些浪漫的表白方式?情人節是溫馨浪漫的日子,在情人節這個浪漫的日子裡,是很多年輕人表白的最佳時機,那麼,情人節有哪些浪漫的表白方式呢?下面就和小編整理了一些情人節表白方式的相關內容,一起來了解一下吧。
  • 2.14情人節,表白相冊賀卡微信製作
    點擊上方節日電子賀卡製作獲取2.14情人節,表白相冊賀卡微信製作       夾著玫瑰的甜香和巧克力的絲滑,一年一度的情人節又到了
  • 微信版情人節表白視頻相冊免費製作
    一年一度的214情人節馬上就要到了,你是否還是單身一人,如果想要擺脫單身命運的話,214情人節表白是一個不錯的選擇。
  • 今天|我的情人節禮物
    今天最開心的不是情人節禮物,最開心的是在朋友圈裡飽享到了女兒小學班主任老師的結婚20年拍的婚紗照。第一張是2001年拍的,後面兩張是2021年的。我很想盜圖放在這個小號裡,和大家分享婚姻中情人的情人節,但這實在是打擾了他人的隱私。照片很美!我只能說,羨慕妒忌,當然沒有恨,唯有滿滿的祝福!
  • 表白牆、表白賀卡,情人節這樣玩!
    心中仰慕已久的男神OR女神卻久久不敢表白?通過表白牆!!!用任何你們兩個能夠聽懂的稱呼大聲的對TA說:「其實我喜歡你很久了」「我!喜!歡!你!/我!愛!你!」怎麼樣,還不去表白!在眾多條表白消息裡能否找到屬於你的那一條,就看你們的啦!
  • 214情人節史上最喪心病狂的激情表白——街頭採訪「愛就要大聲吼出來」
    ,你還是老一套嗎,送巧克力! 對於一些情侶老司機而言成都這些個司空見慣的約會地點早已滿足不了他們為了過個有意義又特別的情人節也是操碎了心▼別方以下是脫離單身,告白女神的分割線,頭條妹已經高能預警了我是江小白,214情人節,我在藍光耍街等你;耍街好耍的街,愛有趣的人新耍都——沒正經耍開心的吃喝玩樂玩家潮聖地 ▽這種簡單粗暴的表白方式
  • 白色情人節:讓英語愛情名言幫你表白!
    你有沒有偷偷喜歡一個人卻苦惱不知如何表白呢?  今天是白色情人節,是表白的大好時機哦!
  • 林志玲婚紗照曝光!網友:這是在拍婚紗?
    11月10日,有網友偶遇了正在拍婚紗照的林志玲夫婦。
  • 前一天剛在泰國拍完婚紗照
    5月1日晚,《陳翔六點半》導演陳翔在微博發布了紀念劉潔的視頻,「你陪伴了六點半成長,而今畫面已經定格在那一瞬,我們沒來得及看那最後一次回眸。」▼一段腿腿化身美女班長的短視頻,可以感受下~近期,腿腿和男友正在密集籌備婚禮,腿腿4月28日剛從泰國拍完婚紗照回來。
  • 你是從什麼時候開始,再也不過情人節了?
    你是從什麼時候起,不過情人節的?不知道怎麼的,2月14日過了大半天,直到出來吃飯,到了商場看到每家店門口都是人滿為患的時候,才意識到這件事。是什麼時候起,情人節好像變得不是那麼重要了?於我,是剛戀愛時,男友送了我一個充滿媽味的天鵝胸針,讓做了兩年老師,好不容易跳出體制的我那一刻夢回了「教導主任」全裝備。
  • 災難系婚紗照,你能猜到在哪兒嗎?
    婚紗照哪裡拍外景最浪漫?或許不是碧海藍天,情緒到位,而是自然環境下出現的那一點點意外與驚喜。
  • 吳奇隆劉詩詩婚紗照曝光,長得醜就拍不出婚紗照大片嗎?
    有顏值怎麼拍都是大片!不僅有人顏值,主要是人家還有錢!那麼,沒顏值的人就拍不出好看的婚紗照了嗎?!我們都是搞創意的,我們不服啊!讓創意完爆顏值吧,這樣的婚紗照才有意義!1、在天氣好的日子,和愛的人在田野鄉間的自然景色裡,開心地玩耍
  • TVB懷孕小花曬與老公恩愛婚紗照慶祝結婚2周年
    前TVB小花沈卓盈現在挺著孕肚安心在家養胎,而2月16日原來就是她和老公的結婚兩周年紀念日,所以她也是接連曬出當時與老公拍下的恩愛婚紗照慶祝結婚
  • 情人節適合表白的5首歌,簡單易唱又暖心
    又到情人節了,如何表白、示愛是很多人頭疼的問題。
  • 新潮婚紗照原來還可以這樣拍,漲姿勢了
    都說穿上婚紗的女人是最美的新娘潔白美麗的裙子給了每個女孩無限的想像▼▼沒有一個女孩不想穿上婚紗與自己的愛人攜手並肩拍一些漂亮的照片定格美好的瞬間▼▼然而看慣了千篇一律的婚紗照你是不是已經產生審美疲勞感覺不再愛了呢腫麼辦???
  • 2017年情人節求婚表白的話:電影感人求婚詞臺詞句子
    2017年情人節求婚表白的話:電影感人求婚詞臺詞句子   電影《當哈利碰上莎莉》有這樣一句經典臺詞:若你要跟某人共度餘生,那麼餘生越快開始越好。那麼當要準備求婚表白的時候,可以說哪些求婚詞?當我累的時候、享受光榮的時候,我有大眾跟我分擔、分享;但是,你生活上的難,卻只能向不停忙碌的我,貼心、小心的傾訴。你總是擔心我休息的不夠、在我緊張的時候幫我加油。也只有你,能在我迷失的時候,用你的話簡單解開我心裡的結;在我沒有信心的時候,讓我能重新相信自己。慢慢地,我覺得自己似乎已經漸漸闖進了那個,曾經只存在我想像中的未來?而我也知道,那個未來一定要有你。
  • 女孩反串新郎,陪96歲奶奶拍婚紗照,一句話暖哭所有人…
    視頻來源:江蘇新聞王娜說,她把自己變成爺爺的樣子,是想幫奶奶圓了年輕時的一個夢。「因為每個女孩都會愛美,在她那個年代是沒有這些條件給她的,那現在我們既然有這個條件,為什麼不能去讓時光倒流。」她說。王娜出生後,就和奶奶生活在一起,到小學的時候才分開。