今天是4.25号。
很快四月也走到了尾声,学期即将过半,我还没有找到理想的实习。不过投出去的文章已经有一篇有了好的结果,另外四篇也期待和祈祷都被录用~~
python爬虫的学习自己大抵学了60%吧,但自己最近在想自己学习python最终目的是想用python来进行数据分析的,爬虫只算是获取数据的第一步,那么接下来是不是应该多学学numpy,pandas以及其他数据分析的库。所以最近还会补充点python中的基础知识,为后面的学习作好准备。
第一部分 数据类型相关知识
能够进行迭代的数据类型有:字符串,列表,字典。
1.数字类型
int(),float()
运算符:%(取余),//(除后取整,例如a=3.8//2 ,结果为1.0)
逻辑运算符:and, or, not
round()作用是四舍五入
break是跳出所在的while或者for循环
2.字符串类型
常用函数:len(),str(),可以通过“+”和“*”来连接;s.replace('a','b')即将字符串s中的 所有a字符用b字符来替换。
如何格式化字符串:
在Python中,采用的格式化方式和C语言是一致的,用%实现,举例如下:
'Hello, %s' % 'world'
'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
你可能猜到了,%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
3.列表类型
列表操作1.png 列表操作2.png4.字典型数据
(1)访问字典中的一项的值:
dictionaryName[key],返回键key对应的值value。
(2)删除字典中的一项:
del dictionaryName[key]
(3)字典的遍历:
设a为一个字典型数据,则
for i in a.keys(),values(),items()经常用到。
(4)判断一个键key知否在字典中:
in 或者not in
eg:'city' in infor.keys()
其他操作方法:
字典的操作.png
5.集合(set)
若s='sunset',a=set(s)
得到a:set(['s','u','n','s','e','t'])
两个集合之间的操作有多种,主要如下:
集合运算.png
第二部分 文件操作相关知识
字符串在python中默认以unicode编码保存的,常见的编码方式有:
(1)ASCII编码
(2)UTF-8编码
(3)GBK编码
(4)Unicode编码
(1)、(2)、(3)通过decode()将字符串解码为unicode,通过encode()将unicode编码字符串转为其他三种编码,
文件一般分为文本文件和二进制文件(除文本以外的文件)
操作文件一般包括:打开文件,(读取、写入、定位、追加、计算)文件,关闭文件。
(1)打开文件
用法f=open(<'xxx文件路径'>,<mode>),其中f是一个变量
(2)文件读取、写入、定位
a)读取文件用法f.read(),f.readline(),f.readlines()三者只是返回值不同,第一个返回的是整个文本的字符串;第二个返回一行的字符串;第三个返回整个文本的列表,其中一行字符串为一个元素。
b)写入文件的用法,使用时需要传入参数file.write(a),file.writelines(a),二者区别在于第一个是写入字符串a到文件file中;第二个是写入列表a到文件file中。
完整例子如:
file=open('C:\Users\guohuaiqi\Desktop\1.txt','w') #打开模式要用''括起来
file.writelines(a)或者file.readlines()
file.close
最后贴上一个用于词频统计(仅仅针对英文文章)的代码:
步骤为:
(1)用爬虫获取内容,用空格''replace文章中出现的其他符号,然后保存为text格式文件;
(2)定义一个函数,先用split('')对句子进行分割,然后对一行的单词进行统计;
(3)读取text文件,将每一行句子传入(2)中的函数,执行完毕后,将字典数据转化为list数据然后进行排序。
此外有两点知识新学到如下:
(4)使用如b={}为一个字典数据,可直接用list(b.items())将b转化为列表数据。
(5)使用sorted()函数对列表中元素是cell的数据进行排序
例:student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10)]
那么sorted(student_tuples, key=itemgetter(2), reverse=True)表示对student_tuples列表按元组中的第三个元素age进行排序**,其中reverse(布尔值)参数用来标记排序顺序的,True-递减,False-递增(默认)
(6)打开文件的路径时要么为'C:\Users\guohuaiqi\Desktop\1.txt',也可是r'C:\Users\guohuaiqi\Desktop\1.txt',这样r后的字符串都按字面意思而不进行转义。
__author__ = 'guohuaiqi'
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import requests
from bs4 import BeautifulSoup
import operator
url='https://hbr.org/2016/04/what-we-can-learn-from-one-of-the-worlds-most-mocked-cars'
a=[]
def get_contents(url):
web_data=requests.get(url)
soup=BeautifulSoup(web_data.text,'lxml')
paragraphs=soup.select('div.article.article-first-row p')
for content in paragraphs:
b=content.get_text().lower()
for ch in b:
if ch in ',().:“”?‘’-':
b=b.replace(ch,'')
b=b.replace('\xa0',' ')
a.append(b)
file=open('C:\\Users\\guohuaiqi\\Desktop\\1.txt','w')
file.writelines(a)
file.close
print('done!!!')
def words_count(line,wordsCount):
words=line.split(' ') #将每一行按空格分割成一个列表
for word in words:
if word in wordsCount.keys(): #应该用wordsCount.keys()而不是wordsCount,否则在计数we时会把包含we的单词如were等计算在内
wordsCount[word]+=1
else:
wordsCount[word]=1
wordsCount={} #wordsCount为一个空字典
def main():
f=open('C:\\Users\\guohuaiqi\\Desktop\\1.txt','r')
for line in f.readlines():
words_count(line,wordsCount)
pairs=list(wordsCount.items()) #会把字典中的键和值转化为一个元组cell,每一个cell作为list的一个元素返回
print(sorted(pairs,key=operator.itemgetter(1),reverse=True))
f.close
if __name__=='__main__':
main()
网友评论