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网站开发,各有各的好处,这里就不一一作解了。