哪个工业园区信息化网站做的好,西安娱乐安排服务,口碑最好的旅游网站,安康市汉滨区新闻1 安装开发需要的一些库(1) 安装mysql 的驱动#xff1a;在Windows上按winr输入cmd打开命令行#xff0c;输入命令pip install pymysql#xff0c;回车即可。(2) 安装自动化测试的驱动selenium#xff1a;在命令行中输入pip install selenium回车。(3) 安装标签解析库pyque…1 安装开发需要的一些库(1) 安装mysql 的驱动在Windows上按winr输入cmd打开命令行输入命令pip install pymysql回车即可。(2) 安装自动化测试的驱动selenium在命令行中输入pip install selenium回车。(3) 安装标签解析库pyquery: 在命令行中输入pip install pyquery回车。(4) Anaconda指的是一个开源的Python发行版本其包含了conda、Python等180多个科学包及其依赖项下载anaconda安装后配置环境变量在path中添加E:\Anaconda3\anaconda\Library\bin重启电脑使环境变量生效安装jieba库在命令行中输入pip install jieba回车。index.html并将chromedriver.exe放在Python安装目录的Scripts文件夹下。2.实现2.1 搜索模块搜索功能即一个数据框和一个搜索按钮组成点击搜索之后会跳转到显示框的界面之后点击爬取数据可以在淘宝网站中对该商品进行搜索并且爬取相关店铺的信息并储存到数据库中。界面显示用到Tkinter库Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。搜索主要用到selenium也就是自动化测试工具测试中根据pyquery中的提供的方法在得到网页源码的情况下根据HTML中的标签找到输入框搜索按钮和翻页的按钮模拟人工输入和点击实现自动化控制最后根据标签提取出相应的信息插入数据库中。因为每个网站因网速的的问题都有响应时间用WebDriverWait(driver,50)设置响应时间为50s也就是响应超过50s便出现异常。提取数据时我用的是find_element_by_css_selector()方法也就是标签选择器可以定位到相应的区域。Python连接数据库用到pymysqlPyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。当得到标题店铺名称地点购买人数店铺链接时以“|”分割拼接成字符串作为参数传递给insert_data()方法插入到数据库中。因为可能会有异常所以放到try块中。爬取数据的实现主要是用到了Pyquery、selenium库以下代码主要实现了对淘宝的检索、翻页和对数据的提取。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960# 设置网站最大响应时间waitWebDriverWait(driver,50)class TaoBaoSearch:# 初始化默认搜索为None创建数据库连接def __init__(self,searchNone):self.namesearchself.mysqlto.Data_oper()# 对淘宝网的搜索def search(self):# 设置源网站这里设置淘宝网站为源网站driver.get(https://www.taobao.com/)#J_TSearchForm div.search-button button# “q”为淘宝首页输入框的标签这里定位到该输入框并设置要搜索商品的名字imputdriver.find_element_by_id(q)imput.send_keys(self.name)# wait.until()该方法的作用是加载出来搜索结果总页数之后开始往下执行pageTextwait.until(EC.presence_of_element_located((By.CSS_SELECTOR,#mainsrp-pager div div div div.total)))totalre.search(\d,pageText.text)# 该方法返回搜索结果的总页数return total.group(0)# 提取出相应的数据def parseHtml(self):htmldriver.page_source#获取网页源代码docqp(html)# 得到到class为m-itemlist下面的class是.items .item的diviteamsdoc(.m-itemlist .items .item).items()# 根据标签选择器提取出需要的数据for itemin iteams:# srcitem(.pic .img).attr(src)srcitem(.row .J_ClickStat).attr(href)# 该店铺的链接personitem(.row .deal-cnt).text()#购买该商品的人数titleitem(.row .J_ClickStat).text().split(\n)# 标题shopitem(.row .shopname).text()# 商品locationitem(.row .location).text()# 地区# 将提取到的数据放到数组中保存起来data[]data.append(str(title[0].strip()))data.append(str(shop.strip()))data.append(str(location.strip()))# 剔除无用字data.append(str(person[:-3].strip()))data.append(str(src).strip())# 调用mysql.insert_data()方法将提取到的数据插入到数据库中self.mysql.insert_data(data)# 对网页进行翻页的方法def nextpage(self,pagenumber):# 定位到翻页的按钮前的输入框也就是对其进行跳转pageInputdriver.find_element_by_css_selector(#mainsrp-pager div div div div.form input)pageInput.clear()pageInput.send_keys(pagenumber)# 定位到跳转按钮对其进行翻页pageButtondriver.find_element_by_css_selector(#mainsrp-pager div div div div.form span.btn.J_Submit)pageButton.click()wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,#mainsrp-pager div div div ul li.item.active span),str(pagenumber)))self.parseHtml()# 定义主函数调用上面的的方法def main(self):totalint(self.search())for iin range(2,total):self.nextpage(i)self.mysql.close()2.2 显示模块当点击搜索之后考虑到可能搜索的商品会有本地储存所以没有对其直接搜索而是在显示框中增加了一个爬取数据的按钮该按钮即对商品进行搜索而本地数据就是对数据库的data表进行查询并将数据显示到界面上来。排序是对本地数据按购买人数进行排序并显示在文本框中在显示行数后面输入数字后可以控制文本框的显示条数默认显示10条。一键删除即把data表中的数据清空。本地数据对数据库中的data表进行查询并将信息显示到文本框中其中每条数据中间以“——”分开每个字段之间以“|”分隔因为考虑到店铺名称或是标题太长而不整齐所以每个字段显示10个字符。排序当点击排序之后会查询出数据库中每条数据的购买人数和店铺名称并且以“”分割拼接成字符串设置一个元组(即数组性质)并根据用户输入的显示行数控制元组的长度具体实现根据从数据库中得到的数据每条每条的读取当读取条数达到用户输入的显示行数的值对元组中的数据用sort(reverseTrue)对其进行从大到小排序原理是因购买人数一个月不超过一百万所以得到的购买人数的最大长度为6位这样当每次读取的购买人数的长度不够6位时在其前面补0这样购买人数的长度都为6对其拼接的格式为“购买人数店铺名称”因为拼接后为字符串类型所以用shot排序时会根据前面的购买人数进行字典序进行排序进而前n条数据就排好序了接着每读取一条数据就对元组中最后一个数据进行比较若是大于其数值就插入到元组中最后返回元组这样就实现了显示n条购买人数最多的数据。清除数据对文本框中的数据进行清空同时删除data表中的数据。以下代码是一个排序的算法其主要作用是在界面上显示多少行数据主要思路为根据用户输入的数字创建一个数组读取数据库中得到数据分离出来购买人数并转换成int类型将数据每次添加一个到数组中当数组的长度等于用户想要显示最大行数时对其数组中的数据从大到小进行排序接下来每当读取一个数据之后就对数组中最小的那个进行比较如果比起小就跳过否则对该数据进行插入操作并删除之前最小的那个数据最后数组中保存的就是购买人数最多的前n条数据。主要代码如下#对数据进行排序data为购买人数def shot_data(self,data,i10): # i为用户想要显示的最大行数默认为10行top[]if ilen(data):ilen(data)for x in data:if len(top)top.append(x)if len(top)i:top.sort(reverseTrue) # 数组内的数据进行排序else:llen(top)ylen(top)t1if xtop[l-1]: # 判断其数值是否大于数组内的最小值while xtop[l-t] and y0: # 控制循环条件t1y-1if y!0: # y的值若是0那么该数值就是最大值for c in range(1,t):top[l-c]top[l-c-1]top[l-t1]xelse:for c in range(1,t):top[l-c]top[l-c-1]top[0]xreturn top # 返回装有最大的前i个数的数组2.3 评论模块点击查看链接之后会出现一个搜索框即根据店铺名称搜索出相关的连接点击查看评论之后可以对其店铺进行爬取最后显示在评论框中。分析就是对评论进行关键词提取并按权重显示出前n个词。点击查看评论进行自动化测试。搜索店铺链接根据用户输入的信息对数据库进行模糊查询返回所有的匹配信息。并显示在文本框中。爬取评论首先清空comment表中的数据根据curselection()方法得到用户选中的链接接着对该链接进行爬取在进入该店铺时会提示需要登录这样会对我们的自动化测试造成一定的阻碍这里我根据pyquery中提供的标签选择器找到关闭按钮模拟点击进行关闭当进入店铺后依旧是先得到该网页的源代码根据标签选择器进行相应的操作爬取到的评论时间评论和购买物品以“|”拼接成字符串显示到文本框的同时插入到数据库中。评论分析jieba是Python的中文分词组件。当查询到comment表中所有数据时将每一条数据拼接成一个字符串接着用jieba.posseg中的cut()方法将评论分割成单个词并标注词性用startswith(a)、startswith(v)得到形容词和动词。最后用jieba.analyse.extract_tags(v,topK10)方法得到动词、形容词中权重较大的前10个词。以下代码是对评论进行关键词的提取用到了jieba库中的一些方法。主要代码如下def dis_an(self):# 清空显示界面self.txtMess.delete(1.0,END)tto.Data_oper()# 得到数据库中的存储信息testt.dis_only_discuss()# 定义字符串adgvadgv# 对评论进行分割并标注词性wordpsg.cut(test)# w为词意f为词性for w,f in word:# 判断词性是否为形容词if f.startswith(a):print(w)adgadg,w# 判断词性是否为动词elif f.startswith(v):vv,w# 根据该词的权重提取出前5个词tagsjieba.analyse.extract_tags(adg,topK5)tags1jieba.analyse.extract_tags(v,topK5)