国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python實現網頁截屏、查庫、發郵件(selenium、phantomjs、mailer、jinj

李文鵬 / 1251人閱讀

摘要:使用實現網頁截屏查庫發郵件的。本是用于發周報郵件的,周報內容包括數據庫中的記錄以及網頁指定元素的截屏。用于網頁截屏,用于傳遞參數。注意其中使用截取中為的元素的操作。

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

本demo是用于發周報郵件的,周報內容包括數據庫中的記錄以及網頁指定元素的截屏。linux中可以用crontab每周定時發送。需要發類似周報的同學這下輕松了!

代碼

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

其中相關數據庫參數、郵件參數、網址等真實數據都處理掉了,自己注意替換補全。

#!/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="test@123.com", To="test@123.com", charset="utf-8")
    message.Subject = "這是郵件主題"
    message.Html = template.render(results=results)
    for r in results:
        #指定cid參數將嵌入郵件html內容發送,不指定將作為附件發送
        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)用于網頁截屏,event_id用于傳遞url參數。使用selenium+phantomjs實現,都是python爬蟲很典型的工具。注意其中使用Image截取DOM中id為main的元素的操作。截取后保存到本地。

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

mail.html內容如下:




    
    
    



最近一周事件記錄:

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

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

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

個人博客:www.hellolvs.com

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41125.html

相關文章

  • Python3 實現淘女郎照片爬蟲

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

    jindong 評論0 收藏0
  • 動態HTML介紹 & Selenium PhantomJS

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

    Lsnsh 評論0 收藏0
  • Python_selenium_phantomjs動態抓取

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

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

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

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

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

    xietao3 評論0 收藏0

發表評論

0條評論

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