Python入门,你是否真正了解过呢

Python入门,你是否真正了解过呢

写在前面

  • 都说python火,python火,人生苦短,我用python,像我这种已经半脚踏入空门的人,对于语言已经没有这么讲究了,但是看python的广告这么多,还是好奇的去研究了研究,首先在windows上安装python,就仿佛windows也能用linux指令了,下面我将对python进行粗略的研究一下。

python可以用来做什么

  • 市场上说学习python来处理文档,这个我不反对,任何编程语言用到了工作上,效率这方面是毋庸置疑的,比如我想做一个自动化的程序,我们完全可以通过代码实现,然后节约时间来做其他的事情,编程在处理数据这方面本来就是专业的,只是python学起来没有那么费劲罢了。下面是我用python写的小九九乘法表,并把它放到excel数据表格中,这就是简单的处理文档。
from xlwt import *
file = Workbook(encoding='utf-8')
table = file.add_sheet('data')
x=1;
a="";
while x<=10:
    y = 1;
    while y<=x:
        # a+=str(y)+"x"+str(x)+"="+str(x*y)+"  "
        a=str(y)+"x"+str(x)+"="+str(x*y)+"  ";
        print(str(y)+"x"+str(x)+"="+str(x*y),end=" ")
        m=x-1
        n=y-1
        table.write(m,n, a)
        y += 1
    x += 1
    print();
file.save('data2.xlsx')
  • 其次python是写爬虫的最好语言,这个我不作评论,任何语言都可以写爬虫,没有好坏之分,只是看你对这一门语言研究的透彻不透彻,虽然我只接触过皮毛,但与作为我母语的C#相比,还是比较方便的,python类似于java,引入包直接使用,但是C#也是有引用的,无非就是代码量的多少罢了,本人本来就对爬虫没有多少了解,可以说是完全自学吧,下面是我分别用python和C#winform写的爬虫。先看看代码量吧,首先这是两个网站,但结构都是一样的,根据分页里面的连接拼接,然后爬取子页的标题、作者、内容。

这是C#写的爬虫

 private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= 10; i++)
            {
                string url = "https://m.gushiwen.org/shiwen/default_2Af01178aaa8c0A" + i + ".aspx";
                GetArt(url);
            }
        }
        public void GetArt(string url)
        {
            //href = "/[A-Za-z0-9].aspx" >< b >
            WebClient MyWebClient = new WebClient();
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
            //string pageHtml = Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句    
            string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
            //textBox1.Text = pageHtml;
            textBox1.Text += url + "\r\n";
            HtmlCenter(pageHtml);
        }
        List<string> ArtUrl = new List<string>();
        public void HtmlCenter(string pageHtml)
        {
            string NumList = "";
            Regex regex = new Regex(@"/shiwenv_[A-Za-z0-9]{0,20}.aspx", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline | RegexOptions.Singleline);
            MatchCollection matchCollection = regex.Matches(pageHtml);
            foreach (Match match in matchCollection)
            {
                NumList = match.ToString() + "\r\n";
                //NumList = NumList.Replace("href=\"", "");
                NumList = "https://m.gushiwen.org" + NumList;
                if (!(ArtUrl).Contains(NumList))
                {
                    ArtUrl.Add(NumList);
                    textBox2.Text += NumList;
                    GetArt2(NumList);
                }                
            }            
        }
        public void GetArt2(string url)
        {
            //<div class="contson" id="[a-z0-9]{0,50}">.*<P>[\u4e00-\u9fa5|\uff0c|\u3002]
            WebClient MyWebClient = new WebClient();
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
            string pageHtml = Encoding.UTF8.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句    
            //string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
            //textBox1.Text += url + "\r\n";
            ArtCenter(pageHtml);
        }
        public void ArtCenter(string PageHtml)
        {
            //<h1 style="font-size:22px; line-height:30px; margin-bottom:10px;">[\u4e00-\u9fa5|·]{0,10}</h1>
            Regex regex = new Regex(@"<h1 style=""font-size:22px; line-height:30px; margin-bottom:10px;"">[\u4e00-\u9fa5|·]{0,20}</h1>", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline | RegexOptions.Singleline);
            string Title = regex.Match(PageHtml).Value;
            Title = Title.Replace(@"<h1 style=""font-size:22px; line-height:30px; margin-bottom:10px;"">", "");
            Title = Title.Replace(@"</h1>", "");
           //<div class="contson" id="[a-z0-9]{0,20}">(\s*(<p>)?(<br />)?([\u4e00-\u9fa5|\uff0c|\u3002|\uff1f|\uff1b|\uff01|\uff08|\uff09|\u300a|\u300b|·|(|)|\s|\uff1a|\u201c|\u201d|\u2018|\u2019|\u3001|/]{0,2000})(</p>)?)*
            Regex regex1 = new Regex(@"<div class=""contson"" id=""[a-z0-9]{0,20}"">(\s*(<p>)?(<br />)?([\u4e00-\u9fa5|\uff0c|\u3002|\uff1f|\uff1b|\uff01|\uff08|\uff09|\u300a|\u300b|·|(|)|\s|\uff1a|\u201c|\u201d|\u2018|\u2019|\u3001|/]{0,2000})(</p>)?)*", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline | RegexOptions.Singleline);
            string ArtCenter = regex1.Match(PageHtml).Value;
            Regex regex2 = new Regex(@"<div class=""contson"" id=""[a-z0-9]{0,20}"">", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Multiline | RegexOptions.Singleline);
            string Tit_id= regex2.Match(ArtCenter).Value;
            ArtCenter = ArtCenter.Replace(Tit_id, "");          
            ArtInfo AI = new ArtInfo();
            AI.Art_Title = Title;
            AI.Art_Aut = "两汉·司马迁";
            AI.Art_Con = ArtCenter;
            AI.Art_Class = "司马迁";
            AI.Art_Time = DateTime.Now;
            textBox3.Text += AI.Art_Title + "\r\n" + AI.Art_Aut+ "\r\n"+ AI.Art_Con + "\r\n"+ AI.Art_Class + "\r\n"+ AI.Art_Time + "\r\n\r\n\r\n";
            ArtAccress ART = new ArtAccress();
            ART.GetArt(AI);
        }
    }

这是Python写的爬虫

import sys
from collections import deque
import urllib
from urllib import request
import re
from bs4 import BeautifulSoup
import lxml
import sqlite3
import jieba

url = 'http://www.ujn.edu.cn/index/jdyw.htm'

unvisited = deque()
visited = set()
unvisited.append(url)

conn = sqlite3.connect('Python.db')
c = conn.cursor()
c.execute('drop table doc')
c.execute('create table doc (id int primary key,link text)')
c.execute('drop table word')
c.execute('create table word (term varchar(25) primary key,list text)')
conn.commit()
conn.close()

print('***************开始!***************************************************')
cnt = 0
print('开始。。。。。 ')

while unvisited:
   url = unvisited.popleft()
   visited.add(url)
   cnt += 1
   print('开始抓取第', cnt, '个链接', url)

   try:
       response = request.urlopen(url)
       content = response.read().decode('utf-8')

   except:
       continue

   soup = BeautifulSoup(content, 'lxml')
   all_li = soup.find_all('div', {'class': "news-main"})

   for a in all_li:
       x = a.find("a").attrs['href']
       if re.match(r'http.+', x):  # 排除是http开头,而不是'https://news.qdu.edu.cn/qdyw'网址
           if not re.match(r'http\:\/\/news\.ujn\.edu\.cn\.+', x):
               continue
       if re.match(r'\/info\/.+', x):  # "/info/1046/20314.htm"
           x = 'http://www.ujn.edu.cn' + x
       elif re.match(r'info/.+', x):  # "info/1046/20314.htm"
           x = 'http://www.ujn.edu.cn/' + x
       elif re.match(r'\.\.\/info/.+', x):  # "../info/1046/20314.htm"
           x = 'http://www.ujn.edu.cn' + x[2:]
       elif re.match(r'\.\.\/\.\.\/info/.+', x):  # "../../info/1046/20314.htm"
           x = 'http://www.ujn.edu.cn' + x[5:]

       if (x not in visited) and (x not in unvisited):
           unvisited.append(x)

   span = soup.find('span', {'class': "p_next"})  # 下一页<a>
   a = ''
   if span != None:
       a = span.find("a").attrs["href"]
   if a != None:
       x = a  # 网址
       if re.match(r'jdyw\/.+', x):
           x = 'http://www.ujn.edu.cn/index/' + x
       else:
           x = 'http://www.ujn.edu.cn/index/jdyw/' + x
       if (x not in visited) and (x not in unvisited):
           unvisited.append(x)

   title = soup.title
   article = soup.find('div', class_='article_content')
   if title == None and article == None:
       print('无内容的页面。')
       continue

   elif article == None:
       print('只有标题。')
       title = title.text
       title = ''.join(title.split())
       article = ''
       author = ''

   elif title == None:
       print('只有内容')
       title = title.text
       title = ''.join(title.split())
       article = ''
       author = author.get_text("", strip=True)
       author = ''.join(author.split())
   else:
       title = title.text
       title = ''.join(title.split())
       article = article.get_text("", strip=True)
       article = ''.join(article.split())

   print('网页标题:', title)

   # 提取出的网页内容存在title,article,author三个字符串里,对它们进行中文分词
   seggen = jieba.cut_for_search(title)
   seglist = list(seggen)
   seggen = jieba.cut_for_search(article)
   seglist += list(seggen)

   # 数据存储
   conn = sqlite3.connect("Python.db")
   c = conn.cursor()
   c.execute('insert into doc values(?,?)', (cnt, url))

   # 对每个分出的词语建立词表
   for word in seglist:
       # print(word)
       # 检验看看这个词语是否已存在于数据库
       c.execute('select list from word where term=?', (word,))
       result = c.fetchall()
       # 如果不存在
       if len(result) == 0:
           docliststr = str(cnt)
           c.execute('insert into word values(?,?)', (word, docliststr))
       # 如果已存在
       else:
           docliststr = result[0][0]  # 得到字符串
           docliststr += ' ' + str(cnt)
           c.execute('update word set list=? where term=?', (docliststr, word))

  • 首先我们看到以上分别用python和C#写的爬虫,单纯从代码量上好像不差上下,这里有一个本人特别费脑子的东西,可能是本人经验不足,所以感觉费脑子,这就是正则表达式,我们可以看到,在C#里使用了大量的正则表达式,我们获取的是整个网站的源码,需要正则表达式对内容进行提取,而Python里面仿佛就是爬取链接的时候用了点正则表达式,而这样的正则表达式都是比较简单的,我们再观察一下,python是可以直接获取标签的,C#可不可以我不知道,但就冲这点,我给python加上一分。通过这python我们可以得出python在爬虫上是比较有优势的。

爬虫可以用来做什么的

  • 我们知道网站的运营离不开数据的支持,python对数据的获取也有恰到的好处,但是我们拿到这些数据可以做什么呢?

  • 首先根据上面的对比我们可以看出,python写爬虫是恰到好处的,逻辑清晰、简单,我们都能看懂,主要的是不烧脑,直接获取html标签循环遍历,比用C#研究一上午的正则表达式方便。

  • 其次我们可以对数据进行分析,大数据都了解过吧,不只是java,python对数据的获取这么友好,何不获取之后再处理一下呢,于是衍生出了云计算、金融理财分析,是的没错,我们数学都学过,我们有一段数据,我们可以根据它来分析,类似于统计,其实电脑本就是一台大型计算机,而编程就是充分的利用计算机,你单纯表面上看到的QQ、游戏之类的只是后来衍生的,在这里这只是本人的看法,其实我对计算机的具体构造以及发展历史也没研究透彻。

  • 我们知道了python可以爬数据,可以云计算,那么在这基础上又能做什么呢,这就衍生出了人工智能,人工智能是需要不断学习的,但是我们有了大量的数据支持,同时又可以云计算,用在人工智能上面不是恰到好处吗。但是我们平时接触过的天猫精灵、小爱同学、小杜这种人工智能具体是没有学习功能的,只是对某些数据的访问,甚至有的还没有权限。AlphaGo阿尔法围棋这就是一个比较高级的人工智能了,他是可以学习的,你想想人类几千年的历史,他能瞬间消化,只要你肯给他录入数据,细思极恐。

  • 最后那些只要是编程语言就可以做的就不用说了,什么控制台应用程序、窗体应用程序、web网站开发,各有各的好处,这里就不一一作解了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值