现在公司这边需要一批电影的词库,一方面是一堆现有的文件中提取整合,另一方面需要自己去爬取。以下就以这两个方面来分别介绍一下。

1.1 如何将一个文件夹下的一堆文件整合成一个文件,把数据合并

这里需要用到os这个库,os.listdir(filepath)会返回该路径下所有文件的一个迭代器,然后再分别把这些文件用for循环打开,把里面的内容提取出来,用一个第三方的变量存储,最后所有的都读完之后,就把这个变量单独存成一个txt,这就是思路。

程序代码可以参考以下以下几行:

import os
filenames=os.listdir(datafile)
for filename in filenames:with open(datafile+filename, encoding='utf-8') as f:for line in f.readlines():prewordlist.append(line.replace("\n",""))

这个执行完之后,会得到一个prewordlist,这里面存储了所有文件中的词汇组成的列表。

1.2 如何对list进行去重

与list这种数据结构平行的还有一个set(集合),set的特点就是里面不存在重复的数据,可以直接使用set(list)将一个list转换为set,也可以将一个list(set)将一个set转换为list。 此外,set还可以进行求交集,并集和差集。

例如在这里,如果我们想对于prewordlist进行去重处理得到新的list,可以进行如下操作,

prewordlist=list(set(prewordlist))

如果想得到两个list之间的交集list,可以进行如下操作:

common_list = list(set(prewordlist).intersection(set(newwordlist)))

如果我们想删除list中的第i个元素,可以使用pop()

list.pop(i)

得到list的实际元素个数

len(list)

1.3 如何判断一个字符串中是否含有特殊字符?

所谓的“特殊字符”可以理解成除了汉字、数字、英文字母之外的其它字符,如标点符号,日语,五角星等等。其基本的判断思路就是对于字符串中的每一个字符进行遍历,看看其是否是汉字、数字、英文字母,判断的依据是根据各个字符的ASCII码或者Unicode吗。

具体代码参考如下(使用Unicode码):

def is_chn(uchar):if uchar >= u'\u4e00' and uchar <= u'\u9fa5':return Trueelse:return False
def is_num(uchar):if uchar >= u'\u0030' and uchar <= u'\u0039':return Trueelse:return False
def is_word(uchar):if ( uchar >= u'\u0041' and uchar <= u'\u005a' ) or ( uchar >= u'\u0061' and uchar <= u'\u007a'):return Trueelse:return False
def judge(ustring):for s in ustring:if s is not '\n':if (is_chn(s) or is_num(s) or is_word(s)) is False:return Falsereturn True

1.4 如何将字符串中英文和数字的全角转成半角

全角半角的概念:

全角是指一个字符占用两个标准字符位置,半角是指一个字符占用一个标准字符位置。全角占两个字节,半角占一个字节。通常的编程语言中,都是使用半角字符。汉字默认是全角的,因此中文里面的句号是一个圆圈,而英文半角的句号只是一个点。

在ASCII码中,全角字符的ASCII码值比对应的半角字符多65248。因此这里只需要首先获得其ASCII码值,然后对于英文和数字,如果是全角,将其减去65248,再进行解码即可,程序代码参考如下:

def w2h(ustring):"""全角转半角"""rstring = ""for uchar in ustring:inside_code=ord(uchar)if inside_code == 12288:                              #全角空格直接转换            inside_code = 32 elif (inside_code >= 65281 and inside_code <= 65374): #全角字符(除空格)根据关系转化inside_code -= 65248rstring += chr(inside_code)return rstring

2 对于三个网站(豆瓣、电影天堂,一起搜电影)进行爬取的方法还是与之前的介绍类似,首先使用requests库的get方法获得html网页,再利用pyquery分析网页中的内容,把需要的信息提取出来,保存。以下直接粘贴以下代码:

电影天堂:

#coding=utf-8
import chardet
import requests
from pyquery import PyQuery as pq
import re
movie=[]
movie_list=[]for page in range(1, 177):print(page)url='http://www.ygdy8.net/html/gndy/dyzz/list_23_'+str(page)+'.html'response=requests.get(url)text = response.text.encode('iso-8859-1').decode('gbk','ignore')#这一步搞了一下午T_Tdoc=pq(text)moviename=doc('#header .contain .bd2 .bd3 .bd3r .co_area2 .co_content8 table tr b a')pattern = re.compile(r'《(.+?)》')movie_list = re.findall(pattern,moviename.text())movie.extend(movie_list)#print(movie)
movie=list(set(movie))
s = "\n".join(movie)
datapath='D:/输出词库/电影天堂电影/'+'zuixin'+'.txt'
with open(datapath,'w') as f:f.write(s)f.close()

一站搜电影:

#coding=utf-8
import chardet
import requests
from pyquery import PyQuery as pq
import re
movie=[]
movie_list=[]for page in range(1, 497):print(page)url='http://v.yizhansou.com/mv/?p='+str(page)response=requests.get(url)#text = response.text.encode('iso-8859-1').decode('gbk','ignore')text=response.textdoc=pq(text)moviename = doc('tr .xt a')movie_list=moviename.text().split()movie.extend(movie_list)#print(movie)
movie=list(set(movie))
s = "\n".join(movie)
datapath='D:/输出词库/一站搜电影/'+'yizhansou'+'.txt'
with open(datapath,'w') as f:f.write(s)f.close()

这些网站的资源毕竟过小,加一起也就两万左右,偶然发现了一个很棒的电影索引网站,电影FM,但是在爬取过程中发现,如果page>50的话,需要登陆后才可以继续获得网页。这里就牵扯到一个表单的问题,搞了一天也没搞出来,但是学习了fidder抓包软件的使用,将在下一节进行分享。

测试开发实习日记(DAY4)相关推荐

  1. 测试开发实习日记(DAY3)

    在公司里头实习,每天面对的术语都是需求,提测,上线. 前天听了一个打包系统(将开发的文件打包成客户可以下载和一键安装的exe文件,或者安卓的apk)的讲解会,说下周提测,但是很多概念都是云里雾里. 现 ...

  2. 测试开发实习日记(DAY1)

    9:30到了公司,上花了半个小时时间签署了实习协议,听HR讲解了实习的一些注意事项.随后,分配了一个公司的邮箱,下载了一款公司内部使用的社交软件(完全仿的微信,有些功能挺创新,还能看当前大楼里厕所的坑 ...

  3. 2021.3.1 百度测试开发实习面试–百度地图一面

    2021.3.1 百度测试开发实习面试–百度地图一面 自我介绍你能实习多长时间呢?因为你所投的是测试开发岗位,那说说你对测试的理解?你最熟悉的语言的是什么语言?Java的死锁是因为什么?内存泄露与内存 ...

  4. 测试开发工作者日记:2020.10.21

    最近忙着搬家,西北旺那边村委会和某开发商 联合下达了腾退指令,所有人一周内滚蛋.作为每次抵挡的靠山-房东 也终于妥协了.周围很大一片区域的几乎半个海淀和半个昌平的公寓和房东们,都一瞬间知道了这个大新闻 ...

  5. 测试开发实习一个月总结

    测试开发实习一个月总结 实习已经一个月了,那么相对于未实习前有那些层次上的提高,我觉得很有必要总结一下. 目前,测试开发实习,所做的是车载"驾驶人疲劳程度"的测试内容.那么我将列个 ...

  6. 测试开发工作者日记:2020.9.28

    又开始这个系列. 最近半个月.忙的跟个monkey一样.天天研究业务.只能利用闲散时间维护下工具和平台. 不过最近拒绝了一次业务测试.发了脾气.甚至扬言大不了不干了,有能耐开了我...这种" ...

  7. 测试开发工作者日记:2020.7.9

    大概十天 没有更新这个系列了. 最近一直在更新接口测试平台系列,每天都有不少粉丝进行友bao好li反cui馈geng 所以今天还是说说测试开发的日记吧... 最近几天在支援一个点点点的测试任务,一个新 ...

  8. [个人经验]我的百度测试开发实习始与末

    第一次更新:2017年12月23日 题记:一个多月前我拿到了百度的实习生offer,18年1月初入职.这是我的第一次公司实习经验,想要从前到后地把它记录下来,一是供自己回顾,二是分享出来希望可以帮到有 ...

  9. 测试电梯的测试用例_测试开发工作者日记:2020.12.24

    画    最近的工作业务测试比较多,但是作为从最底层测试摸爬滚打出来的博主来说,完全没压力,也没有不爽,相反还觉得这是一次大脑放松的机会. 用非常非常快速的方法进行功能测试,甚至用例都不看也不写. 就 ...

  10. 测试开发工作者日记:2020.6.17

    本系列自发布以来广受好评,但为避免变成流水账,所以会打破现有固定1-2天一更的惯例,等凑到足够的质量高的内容再发,后续不定时更新哈.明天开始每天更新接口测试平台系列的代码讲解阶段了. 昨天的日记中,我 ...

最新文章

  1. oracle的表几种连接比较,几种表连接方式的使用场景
  2. R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况
  3. R语言ggplot2可视化自定义可视化结果的背景色(background color)实战:改变整个画板(panel)的背景色、改变图像(plot)区域的背景色
  4. 扯谈spring mvc之WebApplicationContext的继承关系
  5. 最长连续子序列偏移_最长连续不重复子序列
  6. [转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合
  7. 微軟专为Visual Studio 2019设计出一套容器工具擴充套件
  8. 吴恩达神经网络和深度学习-学习笔记-8-归一化输入Normalizing inputs
  9. WhatsApp聊天即时翻译 自动翻译 双向翻译 一键翻译 多开管理
  10. redfish_Redfish和Ansible的带外管理
  11. 链表哈夫曼树--编码--解码
  12. 计算机室教师使用制度,[最新]教师计算机室管理制度
  13. 日日日日日日日日日日
  14. 【电力电子】【2013】基于对称分量提取的三电平三相并网变流器电压暂降时的电网同步与控制
  15. 大数据学习之路-Hive
  16. CentOS7.4离线安装Openssh7.9p1
  17. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)
  18. 阿里云服务器能做小程序吗
  19. 用python输入概率分布,计算信源熵/信息熵
  20. IBM云计算服务–CMS、SoftLayer

热门文章

  1. 摩尔条纹拯救我的3D检测
  2. w10不能访问网络计算机,Win10无法联网提示“无法访问您可能没有权限使用网络资源”怎么办...
  3. 理财学习03-基金类别
  4. 2019奥鹏四月份考试英语计算机,中石油华东2019年秋季学期《大学英语4》在线考试补考(适用于2020年4月份考试)题目【标准答案】...
  5. 阿里云服务器ECS测评
  6. JDK8 到 JDK17版本新增特性
  7. 计算机信息管理调查报告模板,精选市场调查报告模板锦集九篇
  8. 计算机图像识别的原理、过程、应用前景
  9. 程序员如何学习量化交易,一文总结
  10. esp32 camera_ESP32操作L298N以及示例程序说明