整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Vue前端框架:html指令

Vue前端框架:html指令

是讲到v杠test和差值表示。下面再看一个,也就是v杠h,小娜就是h,t r 指定。看一下例子。

比如现在还是例子ctrl c ctrl v幺五,bm-m l直接回看。

下面看一个例子。

·比如我现在把立杠 casp定位通通改成h天亮,通通改成h天亮。来看一下mercy 的时候还是依然是所某的三姨太。

·对于 mercy来说它是不是这地方依然是所某的三姨太。

·对第二个来说the dress 来说这地方是不是四门标签后背景一些死亡标签?

·第三个皮卡丘听到今天气很不错,又见学校。这个是这种事somo 的三姨太。会发现首先说we gone html和we gone test是一样的,都会把标签这种原有的内容给清空。

·这时会发现v杠h q l会不会对这个标签进行解释?因为上是不是不会有死盘标线?让右键去检查的时候大家可以看一下有没有死亡标签。

有,听说会发现h显标指令其实是会对标签进行演示的。这就是test指令。这就是httl 指令,什么指令我就写在这。

取数据并写入xls文件

import csv
import random

import requests
from lxml import etree

# 城市列表如下:
# http://hebei.weather.com.cn/m2/j/hebei/public/city.min.js
# 目前支持北京、天津、重庆三个城市7天天气预报
# 支持河南天气更新
# 18点后获取天气预报将get_text()方法中的0改为1
headers=[
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 "
    "Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 "
    "Safari/537.75.14",
    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)",
    'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',
    'Opera/9.25 (Windows NT 5.1; U; en)',
    'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)',
    'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',
    'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',
    'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9',
    "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 "
    "Chrome/16.0.912.77 Safari/535.7",
    "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 "]


def get_province():
    url='http://www.weather.com.cn/province/'
    r=requests.get(url, headers={'User-Agent': headers[random.randint(1, 11)]})
    # encode解码,将ISO-8859-1解码成unicode
    html=r.text.encode("ISO-8859-1")
    # decode编码,将unicode编码成utf-8
    html=html.decode("utf-8")
    html1=etree.HTML(html)
    data=html1.xpath('/html/body/div[2]/div[2]/ul/li/a')
    list_province=[]
    for i in data:
        item={'省辖市': i.text, '链接': i.get('href')}
        list_province.append(item)
    return list_province


def get_city_link(ul, ulink, list_weather):
    ul=ul
    ulink=ulink
    if ul in list_weather:
        url=ulink
        r=requests.get(url, headers={'User-Agent': headers[random.randint(1, 11)]})
        # encode解码,将ISO-8859-1解码成unicode
        html=r.text.encode("ISO-8859-1")
        # decode编码,将unicode编码成utf-8
        html=html.decode("utf-8")
        html1=etree.HTML(html)
        return html1
    else:
        pass


def get_special(ulink):
    url=ulink
    r=requests.get(url, headers={'User-Agent': headers[random.randint(1, 11)]})
    # encode解码,将ISO-8859-1解码成unicode
    html=r.text.encode("ISO-8859-1")
    # decode编码,将unicode编码成utf-8
    html=html.decode("utf-8")
    html1=etree.HTML(html)
    return html1


def get_city(list_):
    # 上海天气10月23日网页改版
    list_all=['北京', '天津', '重庆']
    list_null=['山西', '湖北', '青海']
    # 安徽  http://www.weather.com.cn/anhui/index.shtml
    # 完整url
    # /html/body/div[1]/div[3]/div/span/a[1]
    # 广东
    # /html/body/div[2]/ul/li[6]/a
    # 广西
    # /html/body/div[1]/div[1]/div[2]/div/span/a[4]
    # 黑龙江
    # /html/body/div[3]/div/a[4]
    list_special_city=['台湾', '香港', '澳门', '河北']
    list_http=['河南', '山东', '陕西', '江苏', '湖南', '福建', '海南', '云南', '四川', '西藏', '江西', '新疆', '甘肃', '宁夏', '内蒙古', '吉林',
                 '辽宁']
    list_city=[]
    for i in list_:
        ul=i['省辖市']
        ulink=i['链接']
        if ul in list_all:
            html=get_city_link(ul, ulink, list_all)
            data=html.xpath('/html[1]/body[1]/div[1]/div[2]/div[1]/span[1]/a')
            for i in data:
                item={'市,区': i.text, '链接': i.get('href')}
                list_city.append(item)
        if ul in list_http:
            html1=get_city_link(ul, ulink, list_http)
            data1=html1.xpath('/html/body/div[1]/div[2]/div/span/a')
            for i in data1:
                item={'市,区': i.text, '链接': (ulink + i.get('href'))}
                list_city.append(item)
        if ul in list_null:
            html2=get_city_link(ul, ulink, list_null)
            data2=html2.xpath('/html/body/div[2]/div[2]/div/span/a')
            for i in data2:
                item={'市,区': i.text, '链接': (ulink + i.get('href'))}
                list_city.append(item)
        if ul in list_special_city:
            pass
        if ul=='安徽':
            html=get_special(' http://www.weather.com.cn/anhui/index.shtml')
            data=html.xpath('/html/body/div[1]/div[3]/div/span/a')
            for i in data:
                item={'市,区': i.text, '链接': i.get('href')}
                list_city.append(item)
        if ul=='广东':
            html=get_special(ulink)
            data=html.xpath(' /html/body/div[2]/ul/li[6]/a')
            for i in data:
                item={'市,区': i.text, '链接': (ulink + i.get('href'))}
                list_city.append(item)
        if ul=='广西':
            html=get_special(ulink)
            data=html.xpath('/html/body/div[1]/div[1]/div[2]/div/span/a')
            for i in data:
                item={'市,区': i.text, '链接': (ulink + i.get('href'))}
                list_city.append(item)
        if ul=='黑龙江':
            html=get_special(ulink)
            data=html.xpath('/html/body/div[3]/div/a')
            for i in data:
                item={'市,区': i.text, '链接': (ulink + i.get('href'))}
                list_city.append(item)
    return list_city


# 北京、天津、重庆
def get_weather():
    # 风向仅供参考
    All_url=get_city(get_province())
    list_weather=[]
    for i in All_url:
        url=i['链接']
        name=i['市,区']
        r=requests.get(url, headers={'User-Agent': headers[random.randint(1, 11)]})
        # encode解码,将ISO-8859-1解码成unicode
        html=r.text.encode("ISO-8859-1")
        # decode编码,将unicode编码成utf-8
        html=html.decode("utf-8")
        html1=etree.HTML(html)
        data_time=html1.xpath('//div[@class="con today clearfix"]//ul[@class="t clearfix"]//li//h1')
        data_weather=html1.xpath('//div[@class="con today clearfix"]//ul[@class="t clearfix"]//li//p[@class="wea"]')
        data_temperature=html1.xpath(
            '//div[@class="con today clearfix"]//ul[@class="t clearfix"]//li//p[@class="tem"]//i')
        data_wind_level=html1.xpath(
            '//div[@class="con today clearfix"]//ul[@class="t clearfix"]//li//p[@class="win"]//i')
        data_wind=html1.xpath(
            '//div[@class="con today clearfix"]//ul[@class="t clearfix"]//li//p[@class="win"]//em//span')
        for i in range(0, len(data_time)):
            Item={'城市': name,
                    '时间': data_time[i].text,
                    '天气': data_weather[i].text,
                    '温度': data_temperature[i].text,
                    '风力': data_wind_level[i].text,
                    '风向': data_wind[i].get('title')}
            list_weather.append(Item)
    csv_File=open("D:\\beijing_tianjin_chongqing_weather.csv", 'w', newline='')
    try:
        writer=csv.writer(csv_File)
        writer.writerow(('城市', '时间', '天气', '实时温度', '风力', '风向'))
        for i in list_weather:
            writer.writerow((i['城市'], i['时间'], i['天气'], i['温度'], i['风力'], i['风向']))
    finally:
        csv_File.close()
    print('北京,重庆,天津天气获取成功')


def get_henan():
    All_url=get_city(get_province())
    list_henan=['郑州', '安阳', '濮阳', '鹤壁', '焦作', '济源', '新乡', '三门峡', '洛阳', '平顶山', '许昌', '漯河', '开封', '周口', '商丘', '南阳',
                  '信阳', '驻马店']
    list_weather1=[]
    for i in All_url:
        url=i['链接']
        name=i['市,区']
        if name in list_henan:
            url=url
            r=requests.get(url, headers={
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                              'like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
            # encode解码,将ISO-8859-1解码成unicode
            html=r.text.encode("ISO-8859-1")
            # decode编码,将unicode编码成utf-8
            html=html.decode("utf-8")
            html1=etree.HTML(html)
            url_true=html1.xpath('//div[@class="gsbox"]//div[@class="forecastBox"]//dl//dt//a[1]')
            Item={
                '城市': name,
                '链接': url_true[0].get('href')
            }
            list_weather1.append(Item)
    return list_weather1


def get_text():
    list_weather1=[]
    list_weather=get_henan()
    for i in list_weather:
        url=i['链接']
        name=i['城市']
        r=requests.get(url,
                         headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                                                'like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
        # encode解码,将ISO-8859-1解码成unicode
        html=r.text.encode("ISO-8859-1")
        # decode编码,将unicode编码成utf-8
        html=html.decode("utf-8")
        html1=etree.HTML(html)
        data_time=html1.xpath('//div[@class="left fl"]//ul//li//h1')
        data_high_temperature=html1.xpath('//div[@class="left fl"]//ul//li//p[@class="tem"]//span')
        data_low_temperature=html1.xpath('//div[@class="left fl"]//ul//p[@class="tem"]//i')
        data_wind=html1.xpath('//div[@class="left fl"]//ul//li//p[@class="win"]//em//span')  # 获取title标签
        data_wind_level=html1.xpath('//div[@class="left fl"]//ul//li//p[@class="win"]//i')
        data_weather=html1.xpath('//div[@class="left fl"]//ul//li//p[@class="wea"]')  # 获取title标签
        for i in range(0, len(data_time)):
            Item={'城市': name,
                    '时间': data_time[i].text,
                    '天气': data_weather[i].get('title'),
                    '高温': data_high_temperature[i - 1].text,
                    '低温': data_low_temperature[i].text,
                    '风向': data_wind[i].get('title'),
                    '风力': data_wind_level[i].text
                    }
            list_weather1.append(Item)
    csv_File=open("D:\\henan_weather.csv", 'w', newline='')
    try:
        writer=csv.writer(csv_File)
        writer.writerow(('城市', '时间', '天气', '高温', '低温', '风力', '风向'))
        for i in list_weather1:
            writer.writerow((i['城市'], i['时间'], i['天气'], i['高温'], i['低温'], i['风力'], i['风向']))
    finally:
        csv_File.close()
    print('河南天气获取成功')


if __name__=='__main__':
    get_text()
    get_weather()

写入数据库

近看了一下《Web Scraping with Python_ Collecting Data from the Modern Web》这本书,所以得动手实践一下,故做此文,与大家分享,希望共同进步

准备工作:

1.安装模块: pandas, BeautifulSoup

2. 注册 mailgun 账号 (https://www.mailgun.com/email-api),用来发邮件

step1: 点击SIGN UP 注册mailgun账号,记住 不要勾选 Add payment info now

step2: 当注册完成之后,记住勾选下面的Python 栏, 复制下面的code到spyder中去

3. 当上述准备工作完成之后:导入需要用到的模块:

from urllib.request import urlopen ,Request
from bs4 import BeautifulSoup
import re
import pandas as pd
import time
import requests

定义function send_simple_message : 主要功能为利用mailgun api 推送邮件

#将复制出来的代码进行细微的修改,比如自定义 subject 和 text 参数
def send_simple_message(subject, text):
 return requests.post(
 "https://api.mailgun.net/v3/sandbox3acbbfebb26a46e685e3561ea38876b3.mailgun.org/messages",
 auth=("api", "fd8db37ccb171b1048e86ffc6f3645fd-b892f62e-0a41511c"),
 data={"from": "Mailgun Sandbox <postmaster@sandbox3acbbfebb26a46e685e3561ea38876b3.mailgun.org>",
 # 目标邮箱
 "to": "jin zhu <zhujin19@qq.com>", 
 "subject": subject,
 "text":text })

4. 利用 BeautifulSoup , Request 库抓取天气信息,我们这里以北京地区的信息为例:

【北京天气】北京天气预报,蓝天,蓝天预报,雾霾,雾霾消散,天气预报一周,天气预报15天查询

?

www.weather.com.cn

def get_weather_info(chaper_url='http://www.weather.com.cn/weather/101010100.shtml'):
 
 headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'} 
 req=Request(url=chaper_url, headers=headers) 
 html=urlopen(req).read() 
 bsObj=BeautifulSoup(html,'html.parser')
 weather=bsObj.find_all(class_='wea')
 temp=bsObj.find_all(class_='tem')
 win=bsObj.find_all(class_='win')
 date=bsObj.find("div", {'id': '7d'}).find('ul').find_all('li')
 data=pd.DataFrame(columns=['日期', '天气', '温度', '风级'],index=[])
 for i in range(len(weather)): 
 data.loc[i,'日期']=date[i].find('h1').string
 data.loc[i,'天气']=weather[i].get_text()
 data.loc[i,'温度']=''.join(temp[i].get_text().split())
 data.loc[i,'风级']=''.join(win[i].get_text().split())
 
 data.set_index(['日期'], inplace=True) 
 data_final=data.to_csv().split()
 return data_final

可以通过单击 右键查看中国天气网的源代码: 可知<p class="wea">,<p class="tem">,<p class="win"> 分别为 天气, 温度,风级的标签。 上述code主要是分开抓取 这些标签,然后将它们存放为dataframe data里面保存

5. 定时执行上述code 并发送邮件到指定邮箱: 这里面是每隔5分钟执行一次上述程序,如果希望每24小时执行一次上述code,请将 300 改为 86400即可。

while True:
 subject='北京未来7天气预报'+time.strftime('%Y-%m-%d',time.localtime(time.time()))
 send_simple_message(subject,get_weather_info())
# 每次间隔5分钟执行一次code
 time.sleep(300.0 - time.time()% 300.0)
# time.sleep(86400 - time.time()% 86400.0)

这里可以参考以下链接:

What is the best way to repeatedly execute a function every x seconds in Python?

来 定时执行 code

最终呈现的效果如下图所示:

最后,如果大家想看其它地区的天气预报,可以通过修改 get_weather_info 里面的 chaper_url 参数, 也就是下面标粗的部分

(chaper_url='http://www.weather.com.cn/weather/101010100.shtml')

具体的城市代码可以通过查看:

https://max.book118.com/html/2016/0917/54858143.shtm

欢迎大家关注知乎专栏:小草学python