成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python實現(xiàn)網(wǎng)頁截屏、查庫、發(fā)郵件(selenium、phantomjs、mailer、jinj

李文鵬 / 1292人閱讀

摘要:使用實現(xiàn)網(wǎng)頁截屏查庫發(fā)郵件的。本是用于發(fā)周報郵件的,周報內(nèi)容包括數(shù)據(jù)庫中的記錄以及網(wǎng)頁指定元素的截屏。用于網(wǎng)頁截屏,用于傳遞參數(shù)。注意其中使用截取中為的元素的操作。

使用python(2.7)實現(xiàn)網(wǎng)頁截屏、查庫、發(fā)郵件的demo。用到了selenium、phantomjs、mailer、jinja2、mysqldb還有image,都是比較典型的用法,可復用性比較強,記錄分享一下。

本demo是用于發(fā)周報郵件的,周報內(nèi)容包括數(shù)據(jù)庫中的記錄以及網(wǎng)頁指定元素的截屏。linux中可以用crontab每周定時發(fā)送。需要發(fā)類似周報的同學這下輕松了!

代碼

直接看代碼吧,用的python2.7,關于第三方模塊的安裝,都很簡單,這里就不贅述了。

其中相關數(shù)據(jù)庫參數(shù)、郵件參數(shù)、網(wǎng)址等真實數(shù)據(jù)都處理掉了,自己注意替換補全。

#!/usr/bin/python
# -*-coding:utf-8 -*-
# Author: lvs

import MySQLdb.cursors
import datetime
from mailer import Mailer
from mailer import Message
from jinja2 import Environment, PackageLoader
from selenium import webdriver
from PIL import Image
from time import sleep


def fetch_results():
    today = datetime.datetime.today()
    seven_day_ago = today - datetime.timedelta(days=7)

    today_str = today.strftime("%Y-%m-%d")
    seven_day_ago_str = seven_day_ago.strftime("%Y-%m-%d")

    db = MySQLdb.connect(host="127.0.0.1", port=3306, user="test", passwd="test", db="test",
                         charset="utf8", cursorclass=MySQLdb.cursors.DictCursor)
    cursor = db.cursor()
    sql = "SELECT * FROM test.test WHERE start_time < "{today}" and start_time >= "{seven_day_ago}"".format(
        today=today_str, seven_day_ago=seven_day_ago_str)
    cursor.execute(sql)
    results = cursor.fetchall()
    db.close()
    return results


def screen_shot(event_id):
    driver = webdriver.PhantomJS(executable_path="/usr/local/phantomjs-2.1.1-linux-x86_64/bin/phantomjs")
    driver.set_page_load_timeout(5)
    driver.set_window_size("1920", "1080")

    url = "http://test.com/detail?id={}".format(event_id)
    driver.get(url)
    sleep(3)

    img_path = "/home/lvs/image/event_{}.png".format(event_id)
    driver.save_screenshot(img_path)

    element = driver.find_element_by_id("main")
    left = int(element.location["x"])
    top = int(element.location["y"])
    right = int(element.location["x"] + element.size["width"])
    bottom = int(element.location["y"] + element.size["height"])
    driver.quit()

    im = Image.open(img_path)
    im = im.crop((left, top, right, bottom))
    im.save(img_path)


def send_mail(results):
    env = Environment(loader=PackageLoader("jinja", "templates"))
    template = env.get_template("mail.html")

    message = Message(From="[email protected]", To="[email protected]", charset="utf-8")
    message.Subject = "這是郵件主題"
    message.Html = template.render(results=results)
    for r in results:
        #指定cid參數(shù)將嵌入郵件html內(nèi)容發(fā)送,不指定將作為附件發(fā)送
        message.attach("/home/lvs/image/event_{}.png".format(r["id"]), cid=r["id"])
        message.attach("/home/lvs/image/event_{}.png".format(r["id"]))

    sender = Mailer("test.smtp.com")
    sender.send(message)


if __name__ == "__main__":
    data = fetch_results()
    for row in data:
        screen_shot(row["id"])
    send_mail(data)

fetch_results()讀庫,返回結果,沒啥好說的。

screen_shot(event_id)用于網(wǎng)頁截屏,event_id用于傳遞url參數(shù)。使用selenium+phantomjs實現(xiàn),都是python爬蟲很典型的工具。注意其中使用Image截取DOM中id為main的元素的操作。截取后保存到本地。

send_mail(results)自然是發(fā)郵件,利用了mailer和jinja2模板,其中env = Environment(loader=PackageLoader("jinja", "templates"))這一句是jinja2加載模板的代碼,模板位于與此py腳本文件同目錄的jinja包下templates目錄下的mail.html中。可以看下在mail中嵌入圖片和作為附件發(fā)送的操作。

mail.html內(nèi)容如下:




    
    
    



最近一周事件記錄:

{% for row in results %} {% endfor %}
事件名稱 事件類型 開始時間 結束時間 事件地點 事件描述 事件詳情
{{row["name"]}} {{row["type"]}} {{row["start_time"]}} {{row["end_time"]}} {{row["place"]}} {{row["description"]}}

jinja變量row為字典類型,對應數(shù)據(jù)庫一條記錄,索引都是表字段名,注意替換。

每行最后一列是來自網(wǎng)頁截屏的圖片,一定要注意此處在img標簽的src屬性中用cid引入,否則原始img標簽的引入方式是不生效的!

個人博客:www.hellolvs.com

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/41125.html

相關文章

  • Python3 實現(xiàn)淘女郎照片爬蟲

    摘要:項目簡介本實驗通過使用實現(xiàn)一個淘寶女郎圖片收集爬蟲,學習并實踐及正則表達式等知識。本教程由阿發(fā)布在實驗樓,完整教程及在線練習地址實現(xiàn)淘女郎照片爬蟲,可以直接在教程中下載代碼使用。 showImg(https://segmentfault.com/img/bVBgrF); 項目簡介:本實驗通過使用 Python 實現(xiàn)一個淘寶女郎圖片收集爬蟲,學習并實踐 BeautifulSoup、Sel...

    jindong 評論0 收藏0
  • 動態(tài)HTML介紹 & Selenium PhantomJS

    摘要:一個網(wǎng)站使用的特征就是源代碼里包含了入口比如如果你在一個網(wǎng)站上看到了,那么采集這個網(wǎng)站數(shù)據(jù)的時候要格外小心。直接點擊下拉框中的選項不一定可行。未審核初審通過復審通過審核不通過專門提供了類來處理下拉框。 JavaScript JavaScript 是網(wǎng)絡上最常用也是支持者最多的客戶端腳本語言。它可以收集 用戶的跟蹤數(shù)據(jù),不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運行網(wǎng)頁游戲。...

    Lsnsh 評論0 收藏0
  • Python_selenium_phantomjs動態(tài)抓取

    摘要:當前版本是一個服務器端的的。也可以說是無界面瀏覽器。安裝不是程序,去官網(wǎng)下載對應系統(tǒng)版本的安裝即可。方法會一直等到頁面被完全加載,然后才會繼續(xù)程序,但是對于是無可奈何的。安裝設置的查看所有可用的屬性。 selenium:https://github.com/SeleniumHQ...當前版本3.0.1A browser automation framework and ecosyste...

    zacklee 評論0 收藏0
  • 爬蟲問題總結

    摘要:編碼我們發(fā)現(xiàn),中有時候存在中文,這是就需要對進行編碼。可以先將中文轉換成編碼,然后使用方法對參數(shù)進行編碼后傳遞。 本文檔對日常學習中用 python 做數(shù)據(jù)爬取時所遇到的一些問題做簡要記錄,以便日后查閱,部分問題可能因為認識不到位會存在一些誤解,敬請告知,萬分感謝,共同進步。 估算網(wǎng)站規(guī)模 該小節(jié)主要針對于整站爬取的情況。爬取整站之前,肯定是要先對一個網(wǎng)站的規(guī)模進行估計。這是可以使用g...

    nanfeiyan 評論0 收藏0
  • 16、web爬蟲講解2—PhantomJS虛擬瀏覽器+selenium模塊操作PhantomJS

    摘要:百度云搜索,搜各種資料搜網(wǎng)盤,搜各種資料虛擬瀏覽器是一個基于的內(nèi)核無頭瀏覽器也就是沒有顯示界面的瀏覽器,利用這個軟件,可以獲取到網(wǎng)址加載的任何信息,也就是可以獲取瀏覽器異步加載的信息下載網(wǎng)址下載對應系統(tǒng)版本下載后解壓文件,將解壓文件夾,剪切 【百度云搜索,搜各種資料:http://www.bdyss.cn】 【搜網(wǎng)盤,搜各種資料:http://www.swpan.cn】 Phantom...

    xietao3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<