关于python爬虫:python-requests-爬取nexus库依赖包数据

前言因为nexus库自带API没有输入依赖包对应的创立工夫(blobCreated)、上传工夫(blobUpdated),为方便管理依赖包只好从页面返回的数据进行爬取(可能应用nexus-cli能够获取,然而没有细究这个办法) 思路我这边应用的nexus库版本为 3.19.1-01,上面是在nexus库API接口信息中能够查问到对于依赖包信息的接口 /v1/components该版本输入的信息中只蕴含个别的 group、name、downloadUrl、repository等音讯,没有上传工夫相干的信息,然而在Browse 中能够查问到相干的信息通过浏览器开发工具能够查问到,该信息来自/service/extdirect 这个申请地址 依据接口申请负载能够看到,该接口须要传入两个参数别离是repo地址以及一个id参数,认真钻研之后发现该id与nexus 自带API(/v1/components)输入的id并非一样,而是来自同一个申请地址不同action的id名为 assetId而这个申请须要传入的参数别离是repo地址以及node信息,node信息能够通过'group'+'name'+'version'信息获取。那么查问到这一步思路就造成闭环了,整体思路如下:通过nexus库自带API接口别离获取:'group'+'name'+'version' 信息,组合成node信息,进而获取到assetId信息,通过assetId信息获取对应的依赖包详细信息。既然思路清晰了,那就开始备菜做饭(敲代码调试)吧~ 实现获取node节点信息 AKA 'group'+'name'+'version'信息nexus_url = 'http://192.168.1.1:8081/' #nexus库地址nexus_username = 'admin' #nexus账号nexus_password = 'admin123' #nexus明码repository = ['aliyun','maven-releases'] #nexus库 repo地址names = []groups = []versions = []downloadUrls = [] #这里顺便获取下载地址,没太大用处能够疏忽asset_ids = []def components_api(repository): #申请components接口获取依赖包包根本信息 print('running components_api\t'+repository) #申请参数 query_params = { 'repository' : repository, #传入的repo信息 'extension' : 'jar' #依赖包类型 } #申请API接口 response = requests.get( nexus_url + '/service/rest/v1/components', params=query_params, auth=(nexus_username, nexus_password) #API接口须要鉴权 ) #判断接口状态 if response.status_code != 200: print('获取依赖项信息失败,状态码:{}'.format(response.status_code)) print(response.content) exit() #将接口返回数据转化为json格局用于解决 response_data = response.json() # print(response_data) global name,group,version,downloadUrl for items in response_data['items']: name = format(items['name']) group = format(items['group']) version = format(items['version']) names.append(name) groups.append(group) versions.append(version) for asset in items['assets']: if asset['path'].endswith('.jar'): downloadUrl = format(asset['downloadUrl']) downloadUrls.append(downloadUrl) #执行工夫 end = datetime.datetime.now() print('components_api totally time is ' , end - start)依据node信息获取assetIdheaders = { #申请头信息 nexus库,cookie信息及token信息依据nexus库账号获取 'X-Requested-With': 'XMLHttpRequest', 'X-Nexus-UI': 'true', 'NX-ANTI-CSRF-TOKEN': '0.1427667210133794', 'Content-Type': 'application/json', 'Origin': nexus_url, 'Referer': nexus_url, 'Cookie': 'NX-ANTI-CSRF-TOKEN=0.1427667210133794; NXSESSIONID=9b2057c6-a456-4f94-85d7-90dcb07eb9e6' }random_number = random.randint(50, 120) #增加一个随机数用于接口操作的tiddef get_nodeinfo(repository): #依据components_api获取的信息拼接取得node门路及asset_id print('get_nodeinfo\t'+repository) api_url = nexus_url + "/service/extdirect" for i in range(len(names)): Groups = [group.replace('.', '/') for group in groups] #将groups中的‘.’转换为‘/’ node = Groups[i]+'/'+names[i]+'/'+versions[i] payload = json.dumps({ "action": "coreui_Browse", "method": "read", "data": [{ "repositoryName" : repository, "node": str(node) }], "type": "rpc", "tid": random_number }) response = requests.request("POST", api_url, headers=headers, data=payload) if response.status_code != 200: #判断接口状态 print('获取依赖项信息失败,状态码:{}'.format(response.status_code)) print(response.content) exit() response_data = response.json() global asset_ids for item in response_data['result']['data']: #依据接口返回数据获取assetid if item['text'].endswith('.jar'): asset_ids.append(item['assetId']) #将API数据中的assetId存入变量asset_ids #执行工夫 end = datetime.datetime.now() print('get_nodeinfo totally time is ' , end - start)依据assetId获取依赖包详细信息INFO_NAME = []INFO_REPO = []INFO_CTIME = []INFO_UTIME = []INFO_DURL = []INFO_GID = []INFO_AID = []INFO_VERSION = []def get_assetid_info(repository): #通过assetid获取jar具体信息包含上传工夫及创立工夫 api_url = nexus_url + "/service/extdirect" for i in range(len(asset_ids)): aid = asset_ids[i] payload = json.dumps({ "action": "coreui_Component", "method": "readAsset", "data": [ aid, repository ], "type": "rpc", "tid": random_number }) response = requests.request("POST", api_url, headers=headers, data=payload) global INFO_NAME,INFO_REPO,INFO_CTIME,INFO_UTIME,INFO_DURL,INFO_GID,INFO_AID,INFO_VERSION response_data = response.json() if response.status_code != 200: print('get_assetid_info 获取依赖项信息失败,状态码:{}'.format(response.status_code)) if response_data['result']['success'] != True: print('get_assetid_info 获取依赖项信息失败,状态码:{}'.format(response.status_code)) else: item = response_data['result']['data'] durls = nexus_url+'/repository/'+repository+'/'+item['name'] #输入信息 print('包名:'+item['name'],'\n'+ '所在repo:',item['repositoryName'],'\n'+'创立工夫:',item['blobCreated'],'\n'+'更新工夫:',item['blobUpdated'],'\n'+'下载地址:',durls) #将信息增加到汇合用于后续解决入库 INFO_NAME.append(item['name']) INFO_REPO.append(item['repositoryName']) INFO_CTIME.append(item['blobCreated']) INFO_UTIME.append(item['blobUpdated']) INFO_DURL.append(durls) INFO_GID.append(item['attributes']['maven2']['groupId']) INFO_AID.append(item['attributes']['maven2']['artifactId']) INFO_VERSION.append(item['attributes']['maven2']['version']) #执行工夫 end = datetime.datetime.now() print('get_assetid_info totally time is ' ,end - start)成果执行成果: ...

April 24, 2023 · 2 min · jiezi

关于python爬虫:uiautomator2-操作手机

uiautomator2 操作手机目录[TOC] 一: 需要:手机插入电脑端后,能够从电脑端管制手机进行微信公众号的信息爬取 二: 抉择uiautomator2调研的起因?uiautomator2底层是Google提供的用来做安卓自动化测试的UiAutomator。 UiAutomator性能很强: 能够对第三方App进行测试获取屏幕上任意一个App的任意一个控件属性,并对其进行任意操作测试逻辑可能用python编写:将uiautomator中的性能凋谢进去,而后再将这些http接口封装成Python库UiAutomator的性能能够满足操控手机,获取组件进而提取想要的信息;uiautomator2是一个python库。基于这些方面的思考,抉择了uiautomator2进行理论调研三: 环境搭建3.1 装置python库uiautomator2(次要库)weditor(直观获取组件档次)jupyter(notebook笔记不便调试记录)3.2 配置adb环境下载adb ADB和Fastboot for Windows: https://dl.google.com/android...ADB和Fastboot for Mac: https://dl.google.com/android...ADB和Fastboot for Linux: https://dl.google.com/android...配置环境变量 windows:控制面板->零碎与平安->零碎->高级零碎设置->环境变量,将adb门路增加到PATH中linux: 编辑.bashrc, 增加export PATH=$PATH:adb门路, 而后执行source .bashrc四: 应用4.1 连贯手机 检测手机是否正确配置关上手机的开发者性能,并开启调试性能应用usb线连贯电脑时,usb用处抉择“传输文件”在命令行中应用adb devices查看是否胜利检测到获取手机连贯后的识别码import oscmd = "adb devices"r = os.popen(cmd)text = r.read() # adb devices命令的执行后果r.close() row = text.split("\n")[1]if not bool(row): print("未检测到设施")raise Exception("未检测到设施")else: con_str = row.split('\t')[0]print(con_str) # 获取识别码 应用uiautomator2连贯手机import uiautomator2 as u2d = u2.connect(con_str)print(d.info)4.2 操作微信搜寻公众号 微信版本信息d.app_info("com.tencent.mm")关上微信 输出中文的时候须要应用fastinputImed.set_fastinput_ime(True) 先关掉微信重新启动d.app_stop("com.tencent.mm")d.app_start("com.tencent.mm") # 微信 获取状态栏大小(后续滑动的时候会用到)status_bar_selector = d.xpath('//*[@resource-id="com.android.systemui:id/status_bar"]')status_bar_x, status_bar_y, status_bar_width, status_bar_height = status_bar_selector.get().rectprint(status_bar_x, status_bar_y, status_bar_width, status_bar_height)查找公众号 ...

August 17, 2022 · 2 min · jiezi

关于python爬虫:通过robotstxt中的Sitemap-寻找网站各个入口地址

# -*- coding:utf-8 -*-import requestsfrom lxml import etreedef get_sitemapinfo(robots_url): """ 性能:获得robots.txt中的Sitemap网址 返回sitemap 例如 https://www.qidian.com/newsitemap2/pcfixedsitemap.xml :param robots_url :return: https://www.qidian.com/newsitemap2/pcfixedsitemap.xml """ response = requests.get(robots_url).text try: link = response.split("Sitemap:")[-1].strip() return link except: print("以后网站robots协定 未蕴含Sitemap")def get_links(sitemap_url,rule): """ 性能:获得Sitemap下所有的入口地址 返回links 例如 ['https://www.qidian.com/all_pub/chanId13700/', 'https://www.qidian.com/all_pub/chanId14100/', 'https://www.qidian.com/all_pub/chanId14400/'] :param sitemap_url sitemap的地址 :param rule xpath匹配规定 :return: https://www.qidian.com/newsitemap2/pcfixedsitemap.xml """ response = requests.get(sitemap_url) r = etree.HTML(response.text.encode("UTF-8")) links = r.xpath(rule) return linksif __name__ == "__main__": ## 开始执行程序 # robots.txt地址 url = "https://www.qidian.com/robots.txt" sitemap_url = get_sitemapinfo(robots_url=url) links = get_links(sitemap_url=sitemap_url, rule="//url/loc/text()") print(f"links:{links}")

August 16, 2022 · 1 min · jiezi

关于python爬虫:爬虫加密字体解密

在爬取文本信息过程中 遇到字体是加密的须要把 方块数字 转换为十进制再依据woff文件中的映射关系进行对应转换须要留神的是这个字体文件url是 每距离几分钟就变动的 如发现和上一次申请的地址不一样 须要再次申请 新的woff文件具体代码如下 from fontTools.ttLib import TTFontif __name__ == '__main__': # 1 依据剖析进去的关系,初始化 把cmap 中的name 与 网页显示文本映射关系 relation_table = {'period': '.', 'zero': '0', 'one': '1', 'two': '2', 'three': '3', 'four': '4', 'five': '5', 'six': '6', 'seven': '7', 'eight': '8', 'nine': '9' } # 2 获取到提取到的UTF-8 的值 text = '' # 3 下载文件并且获取文件中的 cmap 映射 ,上面简化案例假若曾经获取到了字体文件 # cmap= {100233: 'period', 100235: 'three', 100236: 'seven', 100237: 'six', 100238: 'nine', 100239: 'five', 100240: 'eight', 00241: 'two', 100242: 'one', 100243: 'four', 100244: 'zero'} font = TTFont('nxCOAYDu.woff') cmap = font.getBestCmap() # 4 转换逻辑 print(f'begin convert:text is {text}') text_list = list(text) for index, ch in enumerate(text_list): en_number = cmap.get(ord(ch), None) if en_number: alpha_str = relation_table.get(en_number, None) if alpha_str: text_list[index] = alpha_str text_final = ''.join(text_list) # 最初输入的就是页面上的数字 print(f'end convert:text is {text_final}')

August 12, 2022 · 1 min · jiezi

关于python爬虫:原创微博-关键词-爬虫

本文所有教程及源码、软件仅为技术钻研。不波及计算机信息零碎性能的删除、批改、减少、烦扰,更不会影响计算机信息零碎的失常运行。不得将代码用于非法用处,如侵立删 记一次阿里云盾滑块验证剖析并通过操作环境win10 、 macPython3.9数据接口搜寻 https://**********?containerid=100103type%3D{chanenl}%26q%3D{quote(self.words)}&page_type=searchall&page={page}user info https://**********?title=%E5%9F%BA%E6%9C%AC%E8%B5%84%E6%96%99&value={userid}'proxy配置==应用socks需装置 :pip install -U 'requests[socks]'== def _proxy(self): """ 调用 :return: """ # 判断IP是否过期 new_time = datetime.datetime.now() if self.expire_time and new_time < datetime.datetime.strptime(self.expire_time, "%Y-%m-%d %H:%M:%S"): # # 以后工夫小于到期工夫证实可用 # if new_time < datetime.datetime.strptime(self.expire_time, "%Y-%m-%d %H:%M:%S"): print(f'以后应用IP:{self.proxies} 过期工夫:{self.expire_time}') return proxy = Proxy() ip_port, expire_time = proxy.main() self.headers = proxy.headers self.proxies = { 'http': 'socks5://{}'.format(ip_port), 'https': 'socks5://{}'.format(ip_port) } self.expire_time = expire_time依据关键词获取userid def _get_userid(self, response): userid = [] content = json.loads(response) cards = content['data']['cards'] # 数据列表 for card in cards: if card['card_type'] != 11: # 状态=11返回的是用户数据列表 continue for card_group in card['card_group']: userid.append(card_group['user']['id']) # 用户id return userid依据userid获取信息 def _parse_json(self, res): content = json.loads(res) data = {} data['用户id'] = content['data']['userInfo']['id'] # userid data['用户名'] = content['data']['userInfo']['screen_name'] # 用户名 # 性别 sex = content['data']['userInfo']['gender'] data['性别'] = '女' if sex == 'f' else '男' data['微博认证名称'] = content['data']['userInfo']['verified_reason'] # 微博认证名称 data['简介'] = content['data']['userInfo']['description'] # 简介 data['粉丝数量'] = content['data']['userInfo']['followers_count'] # 粉丝数量 data['公布微博量'] = content['data']['userInfo']['statuses_count'] # 公布微博量 data['关注量'] = content['data']['userInfo']['follow_count'] # 关注量 data['用户头像'] = content['data']['userInfo']['profile_image_url'] # 用户头像 data['挪动端地址'] = content['data']['userInfo']['profile_url'] # 挪动端地址 data['关键词'] = self.words return data数据保留 def _save_xls(self, data): """ 保留数据 data : 字典格局 必须和表头长度一样 :return: """ # 判断文件是否存在 如果存在则读取而后插入新数据,不存在则创立一个新DataFrame并增加表头 file = f'{PATH}/数据/关键词-{self.words}.xlsx' Header = ['用户id', '用户名', '性别', '微博认证名称', '简介', '粉丝数量', '公布微博量', '关注量', '用户头像', '挪动端地址', '关键词'] if not os.path.exists(f'{PATH}/数据'): os.mkdir(f'{PATH}/数据') if not os.path.exists(file): # 创立一个新的文件 并写入表头 df = pd.DataFrame(columns=Header) else: # 读取现有文件 df_read = pd.read_excel(file) df = pd.DataFrame(df_read) # 定义一行新数据 data为一个字典 new_data = pd.DataFrame(data, index=[1]) # 自定义索引为:1 ,这里也能够不设置index # 把定义的新数据增加到原数据最初一行 ignore_index=True,示意不按原来的索引,从0开始主动递增 df = df.append(new_data, ignore_index=True) # 保留数据 sheet_name工作表名 index是否增加索引 header表头 df.to_excel(file, sheet_name=self.words, index=False, header=True)数据: ...

June 19, 2022 · 2 min · jiezi

关于python爬虫:西瓜视频url地址解码

https://blog.csdn.net/weixin_...

January 18, 2022 · 1 min · jiezi

关于python爬虫:Python库性能测试之re和lxml效率对比

前言闲来无事,想起来之前在简书发过的文章还没搬过去,正想搬一篇lxml和re效率比照的,后果发现代码没了,索性重写一次。 先上后果: 只做解析加取数据,re比lxml快了300%!解析加pandas解决数据,re比lxml快40%其实这个测试后果应该没什么好纠结的,预计应该是re优于lxml,二者都优于beautifulsoup。 因为很少用beautifulsoup,所以这次没测试它。 注意事项为了防止网络稳定,测试时不应该把网络申请工夫计算进去,这里应用参数传入要解析的HTML。 另外,解析语句的写法优劣会在极大水平上影响后果,所以个别工作重点应该放在表达式的写法上。 小技巧导出list列表数据的时候间接来一个pandas,省时省力 代码# -*- encoding: utf-8 -*-'''@File : test-re-lxml.py@Time : 2021年12月18日 22:33:10 星期六@Author : erma0@Version : 1.0@Link : https://erma0.cn@Desc : 测试re lxml效率'''import reimport timeimport pandas as pdimport requestsfrom lxml import etreefrom itertools import zip_longest# ahtml = requests.get('http://test.cn/').textahtml = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>教育网盘</title><style type="text/css"><!--td { font-size: 12px;}a:link { text-decoration: none;}body { font-size: 12px;}a:visited { text-decoration: none;}a:hover { color: #FF0000; text-decoration: underline;}--></style></head><body><table width="90%" border="0" align="center" class="list"><tr bgcolor=#BFE6FD height="20"> <td width="42" align=center>图标</td> <td width="381" align=center>文件名</td> <td width="98" align=center>所属用户</td> <td width="85" align=center>大小</td> <td width="132" align=center>更新工夫</td></tr><div class=main_content_2 id=content><!-- Copyright(C) 2005-2010 All Rights Reserved. --><tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/pdf.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f1%c6%fb%b0%fc%b0%b2%d7%b0%ca%a9%b9%a4%bc%bc%ca%f5%bd%bb%b5%d7.pdf>1汽包装置施工技术交底.pdf</a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>871.49 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%cb%ae%c0%e4%b1%da%b0%b2%d7%b0%ca%a9%b9%a4%bc%bc%ca%f5%bd%bb%b5%d7.doc>水冷壁装置施工技术交底.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%2f%cb%ae%c0%e4%b1%da%b0%b2%d7%b0%ca%a9%b9%a4%bc%bc%ca%f5%bd%bb%b5%d7.doc' title='查看文件 水冷壁装置施工技术交底.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>139.66 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%cb%ae%d1%b9%ca%d4%d1%e9%bc%bc%ca%f5%bd%bb%b5%d7+-+%b8%b1%b1%be.doc>水压试验技术交底 - 正本.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%2f%cb%ae%d1%b9%ca%d4%d1%e9%bc%bc%ca%f5%bd%bb%b5%d7+-+%b8%b1%b1%be.doc' title='查看文件 水压试验技术交底 - 正本.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>173.44 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%d1%cc%b5%c0%b0%b2%d7%b0%ca%a9%b9%a4%bc%bc%ca%f5%bd%bb%b5%d7+-+%b8%b1%b1%be.doc>烟道装置施工技术交底 - 正本.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%bc%bc%ca%f5%bd%bb%b5%d7%2f%2f%d1%cc%b5%c0%b0%b2%d7%b0%ca%a9%b9%a4%bc%bc%ca%f5%bd%bb%b5%d7+-+%b8%b1%b1%be.doc' title='查看文件 烟道装置施工技术交底 - 正本.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>130.84 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f(%d7%ee%d6%d5%a3%a9%c9%bd%ce%f7%b6%ab%d2%e5%b8%c9%cf%a8%bd%b9%b9%a4%b3%cc%ca%a9%b9%a4%d7%e9%d6%af%c9%e8%bc%c60610.doc>(最终)山西东义干熄焦工程施工组织设计0610.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f(%d7%ee%d6%d5%a3%a9%c9%bd%ce%f7%b6%ab%d2%e5%b8%c9%cf%a8%bd%b9%b9%a4%b3%cc%ca%a9%b9%a4%d7%e9%d6%af%c9%e8%bc%c60610.doc' title='查看文件 (最终)山西东义干熄焦工程施工组织设计0610.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>2.4 M</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%b6%ab%d2%e5%b8%c9%cf%a8%bd%b9%b9%f8%c2%af%cb%ae%d1%b9%ca%d4%d1%e9%b7%bd%b0%b8(1)10.10.docx>东义干熄焦锅炉水压试验计划(1)10.10.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%b6%ab%d2%e5%b8%c9%cf%a8%bd%b9%b9%f8%c2%af%cb%ae%d1%b9%ca%d4%d1%e9%b7%bd%b0%b8(1)10.10.docx' title='查看文件 东义干熄焦锅炉水压试验计划(1)10.10.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>103.62 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%c9%bd%ce%f7%b8%c9%cf%a8%bd%b9%b9%f8%c2%af%cb%ae%c0%e4%b1%da%b0%b2%d7%b0%b7%bd%b0%b80507.doc>山西干熄焦锅炉水冷壁装置计划0507.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%c9%bd%ce%f7%b8%c9%cf%a8%bd%b9%b9%f8%c2%af%cb%ae%c0%e4%b1%da%b0%b2%d7%b0%b7%bd%b0%b80507.doc' title='查看文件 山西干熄焦锅炉水冷壁装置计划0507.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>711.05 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%b6%ab%d2%e5%c6%fb%b0%fc%b5%f5%d7%b0%ca%a9%b9%a4%b7%bd%b0%b8+0710.docx>东义汽包吊装施工计划 0710.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%b6%ab%d2%e5%c6%fb%b0%fc%b5%f5%d7%b0%ca%a9%b9%a4%b7%bd%b0%b8+0710.docx' title='查看文件 东义汽包吊装施工计划 0710.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>989.66 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2fPQR044(12Cr2MoG%a3%ac273%a1%c113)SMAW%2bGTAW.doc>PQR044(12Cr2MoG,273×13)SMAW+GT...</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2fPQR044(12Cr2MoG%a3%ac273%a1%c113)SMAW%2bGTAW.doc' title='查看文件 PQR044(12Cr2MoG,273×13)SMAW+GTAW.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>20.24 M</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%b9%f8%c2%af%ba%b8%bd%d3%ca%a9%b9%a4%b7%bd%b0%b80525.doc>锅炉焊接施工计划0525.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%b9%f8%c2%af%ba%b8%bd%d3%ca%a9%b9%a4%b7%bd%b0%b80525.doc' title='查看文件 锅炉焊接施工计划0525.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>711.5 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/doc.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%c9%bd%ce%f7%b6%ab%d2%e5%b9%f8%c2%af%b8%d6%bc%dc%b0%b2%d7%b0%ca%a9%b9%a4%b7%bd%b0%b80520.doc>山西东义锅炉钢架装置施工计划0520.doc</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%c9%bd%ce%f7%b6%ab%d2%e5%b9%f8%c2%af%b8%d6%bc%dc%b0%b2%d7%b0%ca%a9%b9%a4%b7%bd%b0%b80520.doc' title='查看文件 山西东义锅炉钢架装置施工计划0520.doc ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>1.08 M</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%b6%ab%d2%e5230T%b8%c9%cf%a8%bd%b9%d3%e0%c8%c8%b9%f8%c2%af%b0%b2%d7%b0%b7%bd%b0%b8.docx>东义230T干熄焦余热锅炉装置计划.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%b6%ab%d2%e5230T%b8%c9%cf%a8%bd%b9%d3%e0%c8%c8%b9%f8%c2%af%b0%b2%d7%b0%b7%bd%b0%b8.docx' title='查看文件 东义230T干熄焦余热锅炉装置计划.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>418.04 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%b6%ac%bc%be%ca%a9%b9%a4%b7%bd%b0%b8+11.11.docx>夏季施工计划 11.11.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%bc%bc%ca%f5%2f%ca%a9%b9%a4%b7%bd%b0%b8%2f%2f%b6%ac%bc%be%ca%a9%b9%a4%b7%bd%b0%b8+11.11.docx' title='查看文件 夏季施工计划 11.11.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>47.07 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/pdf.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f1%c6%fb%b0%fc%b0%b2%d7%b0%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.pdf>1汽包装置平安技术交底.pdf</a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>908.46 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%d3%e0%c8%c8%b9%f8%c2%af%c8%eb%bf%da%d1%cc%b5%c0%b0%b2%d7%b0%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx>余热锅炉入口烟道装置平安技术交底.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%d3%e0%c8%c8%b9%f8%c2%af%c8%eb%bf%da%d1%cc%b5%c0%b0%b2%d7%b0%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx' title='查看文件 余热锅炉入口烟道装置平安技术交底.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>50.87 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%d3%e0%c8%c8%b9%f8%c2%af%b8%d6%bd%e1%b9%b9%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx>余热锅炉钢结构平安技术交底.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%d3%e0%c8%c8%b9%f8%c2%af%b8%d6%bd%e1%b9%b9%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx' title='查看文件 余热锅炉钢结构平安技术交底.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>50.86 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%b5%f5%d7%b0%d6%b8%bb%d3%b0%b2%c8%ab%bd%bb%b5%d7.docx>吊装指挥平安交底.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%b5%f5%d7%b0%d6%b8%bb%d3%b0%b2%c8%ab%bd%bb%b5%d7.docx' title='查看文件 吊装指挥平安交底.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>13.59 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%cb%ae%d1%b9%ca%d4%d1%e9%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx>水压试验平安技术交底.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%cb%ae%d1%b9%ca%d4%d1%e9%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx' title='查看文件 水压试验平安技术交底.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>48.24 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%d2%c6%b6%af%bd%c5%ca%d6%bc%dc%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7+-+10.31.docx>挪动脚手架平安技术交底 - 10.31.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%d2%c6%b6%af%bd%c5%ca%d6%bc%dc%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7+-+10.31.docx' title='查看文件 挪动脚手架平安技术交底 - 10.31.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>45.41 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> <tr bgcolor=#E8F0FF height=20><td width=25 align=center><img src=http://pan.test.com/filetype/docx.gif></td><td><a href=homeapply.aspx?down=ok&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%d3%e0%c8%c8%b9%f8%c2%af%cb%ae%c0%e4%b1%da%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx>余热锅炉水冷壁平安技术交底.docx</a><a href='http://pan.test.com/show.aspx?type=4&filepath=HNAZ%2f%b0%b2%c8%ab%2f%b0%b2%c8%ab%bd%bb%b5%d7%2f%2f%d3%e0%c8%c8%b9%f8%c2%af%cb%ae%c0%e4%b1%da%b0%b2%c8%ab%bc%bc%ca%f5%bd%bb%b5%d7.docx' title='查看文件 余热锅炉水冷壁平安技术交底.docx ' target=_blank><img src=http://pan.test.com/pics/edit.gif border=0></a> <font color=#999999></font></td><td width=120 align=center>HNAZ</td><td width=120> <div lign=center>50.98 K</div></td><td width=120><div align=center>2021-11-23</div></td></tr> </div><tr> <td colspan="5" align=center><div align="center">总共记录数:3276页码:<a href=http://test.com/newshare.aspx?page=10 class=page>...</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=11 class=page>11</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=12 class=page>12</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=13 class=page>13</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=14 class=page>14</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=15 class=page>15</a>&nbsp;&nbsp;<span class=10>16</span>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=17 class=page>17</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=18 class=page>18</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=19 class=page>19</a>&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=20 class=page>20</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href=http://test.com/newshare.aspx?page=21 class=page>...</a><a href=http://test.com/newshare.aspx?page=1>第一页</a><a href=http://test.com/newshare.aspx?page=15>上一页</a><a href=http://test.com/newshare.aspx?page=17>下一页</a><a href=http://test.com/newshare.aspx?page=164>最末页</a>第16页/共164页 </div></td> </tr></table></body></html>'''def get_lxml(html): d = etree.HTML(html) link = d.xpath('//tr/td[2]/a[1]/@href') title = d.xpath('//tr/td[2]/a[1]/text()') passwd = d.xpath('//tr/td[2]/font/text()') user = d.xpath('//tr/td[3][@width="120"]/text()') size = d.xpath('//tr/td[4]/div/text()') time = d.xpath('//tr/td[5]/div/text()') datas = list(zip_longest(link, title, passwd, user, size, time, fillvalue='')) datas = pd.DataFrame(datas, columns=['link', 'title', 'passwd', 'user', 'size', 'time']) datas['link'] = datas['link'].str.strip() datas.to_csv('result-lxml.csv') # print(len(datas)) return datasdef get_re(html): datas = [] # datas= r.findall(html) datas = re.findall(rep, html, re.S) # for data in datas: # link, title, passwd, user, time # pass # print(len(datas)) datas = pd.DataFrame(datas, columns=['link', 'title', 'passwd', 'user', 'size', 'time']) datas['link'] = datas['link'].str.strip() datas.to_csv('result-re.csv') return datasif __name__ == '__main__': rep = r"<td><a href=([\s\S]*?)>([\s\S]*?)</a>[\s\S]*?<font color=#999999>([\s\S]*?)</font>[\s\S]*?center>([\s\S]*?)</td><td width=120> <div lign=center>([\s\S]*?)</div></td><td width=120><div align=center>([\s\S]*?)</div>" r = re.compile(rep, re.S) for name, function in [('lxml', get_lxml), ('re', get_re)]: start = time.time() for i in range(500): function(ahtml) # function(ahtml) end = time.time() print(name, end - start)后果lxml 2.1219968795776367re 1.341965675354004re比lxml快了靠近40% ...

December 19, 2021 · 4 min · jiezi

关于python爬虫:node爬虫爬取网页图片

前言周末本人在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片,本人就想着作为一个码农,能够把这些图片都爬取下来做成一个微信小程序,说干就干,理解一下根本都晓得怎么做了,整顿分享一波给大家。 目录装置node,并下载依赖搭建服务申请咱们要爬取的页面,返回json装置node咱们开始装置node,能够去node官网下载nodejs.org/zh-cn/,下载实现后运行node应用, node -v装置胜利后会呈现你所装置的版本号。 接下来咱们应用node, 打印出hello world,新建一个名为index.js文件输出 console.log('hello world')运行这个文件 node index.js就会在控制面板上输入hello world 搭建服务器新建一个·名为node的文件夹。 首先你须要下载express依赖 npm install express 复制代码再新建一个名为demo.js的文件 目录构造如图: !img](https://p1-jj.byteimg.com/tos...) 在demo.js引入下载的express const express = require('express');const app = express();app.get('/index', function(req, res) {res.end('111')})var server = app.listen(8081, function() { var host = server.address().address var port = server.address().port console.log("利用实例,拜访地址为 http://%s:%s", host, port)})运行node demo.js简略的服务就搭起来了,如图: !img](https://p1-jj.byteimg.com/tos...) 申请咱们要爬取的页面申请咱们要爬取的页面 npm install superagentnpm install superagent-charsetnpm install cheeriosuperagent 是用来发动申请的,是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,外部依赖nodejs原生的申请api,实用于nodejs环境下.,也能够应用http发动申请 superagent-charset避免爬取下来的数据乱码,更改字符格局 cheerio为服务器特地定制的,疾速、灵便、施行的jQuery外围实现.。 装置完依赖就能够引入了 var superagent = require('superagent');var charset = require('superagent-charset');charset(superagent);const cheerio = require('cheerio');引入之后就申请咱们的地址,https://www.qqtn.com/tx/weixi...,如图: ...

December 8, 2021 · 2 min · jiezi

关于python爬虫:高级爬虫实战系统掌握破解反爬技能-挑战高薪

download:高级爬虫实战-零碎把握破解反爬技能 挑战高薪自己公司筹备换SpringCloud微服务,最近正在学习这方面的货色,总结一下浅显易懂的资料,分享一下。 运行环境: jdk8+mysql+IntelliJ IDEA+maven 我的项目技术 springboot+maven+Hibernate+thymeleaf 数据库文件 链接: https://pan.baidu.com/s/1qZVl4Qw 明码:2ngr 链接: https://pan.baidu.com/s/1nxqqvsX 明码: cc4r 我的项目截图 一、json 接口开发 在以前的spring 开发的时候需要咱们提供json接口的时候需要做的配置 1.增加 jackjson 等相干jar包 2.配置spring controller扫描 3.对接的方法增加@ResponseBody 就这样咱们会常常因为配置谬误,导致406谬误等等,spring boot如何做呢,只需要类增加@RestController即可,默认类中的方法都会以json的格局返回 二、自定义Filter Spring Boot主动增加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,并且咱们可能自定义Filter 两个步骤: 1.实现Filter接口,实现Filter方法 2.增加@Configuration 注解,将自定义Filter加入过滤链 三、自定义Property 配置在application.propertie定义配置(这里要首先把redis服务起来,其余地方有用到redis,不起会报错,保障数据库连接正确) 测试通过 四、数据库操作 1、增加相jar包 2、添配置文件 hibernate.hbm2ddl.auto参数的作用次要用于:主动创建|更新|考据数据库表结构,有四个值: (1)、create: 每次加载hibernate时都会删除上一次的生成的表,而后根据你的model类再从新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 (2)、create-drop :每次加载hibernate时根据model类生成表,然而sessionFactory一敞开,表就主动删除。 (3)、update:最罕用的属性,第一次加载hibernate时根据model类会主动建立起表的结构(前提是先建立好数据库),当前加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 利用第一次运行起来后才会。 (4)、validate :每次加载hibernate时,考据创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,然而会插入新值。 dialect 次要是指定生成表名的存储引擎为InneoDBshow-sql 是否打印出主动生产的SQL,便利调试的时候查看 3、增加实体类和Dao SpringBoot入门整合开发java Web我的项目实例 dao只需继承JpaRepository类就可能,几乎可能不必写方法,可能根据方法名来主动的生产SQL,比如findByUserName 会主动生产一个以 userName 为参数的查问方法,比如 findAlll 主动会查问表外面的所有数据,比如主动分页等等。。 Entity中不映射成列的字段得加@Transient注解,不加注解也会映射成列 SpringBoot入门整合开发java Web我的项目实例测试 SpringBoot入门整合开发java Web我的项目实例 五、Spring boot中Redis的使用 ...

October 26, 2021 · 1 min · jiezi

关于python爬虫:Python爬虫教程四

一、线程、过程、协程的概念 线程:是过程的一个执行单元,是过程内可调度实体。比过程更小的独立运行的根本单位。线程也被称为轻量级过程。 过程:是并发执行的程序在执行过程中调配和治理资源的根本单位,是一个动静概念,竞争计算机系统资源的根本单位。 协程:是一种比线程更加轻量级的存在。一个线程也能够领有多个协程。其执行过程更相似于子例程,或者说不带返回值的函数调用。 二、多线程 1.单线程:两个局部的工作,执行完后面再执行前面工作。 2.多线程 通过输入后果,能够看到两个线程是同时进行工作的,但工作执行由CPU决定(能够创立多个线程)。 3.第二种多线程办法 其输入后果与第一种形式相似,可通过后果看出两个线程在同时工作。 4.建设多个子线程。 三、多过程 其逻辑与多线程逻辑基本相同。 四、线程池及过程池 咱们可通过线程池和过程池进行多个线程或过程的并行运算。 1.线程池 2.过程池 五、协程 1.协程:协程是比线程更小的一种执行单元,你能够认为是轻量级的线程,当程序遇见IO操作时,能够抉择切换到其余工作上,更适宜于用来实现彼此相熟的程序组件,如单干式多任务,迭代器,有限列表和管道。 宏观上是一个工作一个工作进行切换,切换条件是IO操作;宏观上为多个工作一起执行(多任务异步操作)。 2.异步协程及同步操作。 同步操作输入后果:运行工夫9秒,根本为等待时间。 异步操作: 异步操作输入后果:4秒的工夫根本为最长等待时间,两个工夫比照可看出异步操作为同时启动多个工作。 3.应用异步协程实战下载柔美图库图片,抉择三张图片下载地址进行简略的下载,学习aiohttp模块的利用,与requests模块进行比照。 输入后果: 4.实战爬取百度小说西游记全文。 其页面源代码中没有小说内容,关上开发者工具,点击查看全副章节。 找到题目内容及题目内容所在链接。上面寻找小说具体内容及内容所在链接,点击任意一章进入。 上面进行小说内容爬取,小说内容较多,咱们应用异步协程的形式进行爬取,通过book_id、c_id进行传参,可通过批改book_id即可爬取百度小说中其余小说的内容。 

October 9, 2021 · 1 min · jiezi

关于python爬虫:python爬虫教程一

 Python版本:python3.6 应用工具:pycharm 一、第一个爬虫程序 取得网址源代码。如下图获取百度页面源代码。 二、Web申请过程 1. 服务器渲染:在服务器中间接把数据和html整合在一起,返回给浏览器。(在页面源代码中能看到数据) 2. 客户端渲染:第一次申请只有一个html骨架,第二次申请拿到数据,进行数据展现。(在页面源代码中,看不到数据) 三、requests入门 1. 获取搜狗引擎搜寻周杰伦页面源代码。 2. 呈现报错,网页存在反爬,解决反扒。 3. 批改代码,使其更加灵便获取不同搜寻内容对应不同页面源代码。 4.当申请形式为POST时,以百度翻译为例获取页面源代码。 5. 当想要爬取数据与网页框架不在一起时。以豆瓣电影排行榜为例。需先找到所需爬取数据地位。 将其参数变量进行封装,补充网址参数,其参数信息地位及代码如下: 留神:应用完爬虫程序后,敞开爬虫程序。 如上示例需应用resp.close()敞开爬虫程序。 四、数据解析 本文中将介绍三种解析形式:re解析、bs4解析、xpath解析。 1、re解析:Regular Expression,正则表达式,一种应用表达式的形式对字符串进行匹配的语法规定。 长处:速度快、效率高、准确性高 毛病:上手难度较高 语法:应用元字符进行排列组合用来匹配字符串(元字符是具备固定含意的特殊符号),罕用元字符: . 匹配除换行符以外的任意字符 a|b 匹配字符a或b \w 匹配字母或数字或下划线 \W 匹配非字母或数字或下划线 \s 匹配任意空白符 \S 匹配非空白符 \d 匹配数字 \D 匹配非数字 […] 匹配字符组中的字符 [^…] 匹配除字符组中的所有字符 ^ 匹配字符串的开始 $ 匹配字符串的完结 量词:管制元字符呈现的次数 * 反复零次或屡次 + 反复一次或屡次 ? 反复零次或一次 {n} 反复n次 {n,} 反复n次或更屡次 {n,m} 反复n到m次 (1)re模块应用,findall() 匹配字符串中所有的合乎正则的内容 ...

September 14, 2021 · 1 min · jiezi

关于python爬虫:爬虫docker-部署-python-selenium-firefoxheadless

外观往往和事物的自身齐全不符,世人都容易为外表的装璜所坑骗。—— 莎士比亚 《威尼斯商人》一. 概述上一篇文章 【爬虫】python+selenium+firefox应用与部署详解 介绍了 selenium 传统形式部署与应用,须要装置浏览器、装置浏览器对应的驱动等,对于我来说配置还是比拟繁琐,有没有没有简略的配置形式呢?有,那就是应用 docker 来部署,接下来将介绍如何应用 docker 部署 python + selenium + firefox-headless。 二. docker 装置 selenium/standalone-firefoxselenium docker hub 地址:https://hub.docker.com/u/sele...拜访下面的地址,抉择一个对应浏览器镜像,这里抉择 selenium/standalone-firefox,如下图所示: 疾速开始更多配置与应用能够查看 github:https://github.com/SeleniumHQ...应用上面的命令启动一个 Firefox 的 docker 容器: $ docker run --name firefox -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-firefox:3.141拜访 http://localhost:4444 测试 webDriver,如下图所示: 拜访 http://localhost:4444/wd/hub/... 跳转到 selenium 控制台,如下图所示: 留神: 当为蕴含浏览器的镜像执行docker运行时,请应用标记 --shm-size 2g 来应用主机的共享内存始终应用带有残缺标签的 Docker 镜像来固定特定的浏览器和网格版本。为什么须要设置 --shm-size 2g: 这是一个已知的解决方案,以防止在docker容器内浏览器解体,2gb的shm大小是任意的,但已知能够很好地工作,您的特定用例可能须要不同的值,倡议依据您的须要调整这个值。 能够应用上面的命令进入到 firefox 容器中: docker exec -it firefox bash应用上面命令,能够看到容器中曾经装置好了 firefox 和 geckodriver: ...

August 17, 2021 · 2 min · jiezi

关于python爬虫:Python爬取爱奇艺网剧隐秘的角落弹幕数据实现简单可视化附源码

Python爬取爱奇艺网剧《隐秘的角落》弹幕数据,实现简略可视化(附源码) 明天指标爬取201865 条《隐秘的角落》弹幕数据 工具应用开发环境: win10、python3.6 开发工具: pycharm 相干模块 : requests,stylecloud 思路剖析1、爬虫获取数据爱奇艺的弹幕数据是以 .z 模式的压缩文件存在的,先获取 tvid 列表,再依据 tvid 获取弹幕的压缩文件,最初对其进行解压及存储,大略就是这样一个过程。 def get_data(tv_name,tv_id): url = 'https://cmts.iqiyi.com/bullet/{}/{}/{}_300_{}.z' datas = pd.DataFrame(columns=['uid','contentsId','contents','likeCount']) for i in range(1,20): myUrl = url.format(tv_id[-4:-2],tv_id[-2:],tv_id,i) print(myUrl) res = requests.get(myUrl) if res.status_code == 200: btArr = bytearray(res.content) xml=zlib.decompress(btArr).decode('utf-8') bs = BeautifulSoup(xml,"xml") data = pd.DataFrame(columns=['uid','contentsId','contents','likeCount']) data['uid'] = [i.text for i in bs.findAll('uid')] data['contentsId'] = [i.text for i in bs.findAll('contentId')] data['contents'] = [i.text for i in bs.findAll('content')] data['likeCount'] = [i.text for i in bs.findAll('likeCount')] else: break datas = pd.concat([datas,data],ignore_index = True) datas['tv_name']= str(tv_name) return datas共爬获得到201865 条《隐秘的角落》弹幕数据。 ...

August 16, 2021 · 1 min · jiezi

关于python爬虫:Python爬虫豆瓣网热门话题保存文本本地数据并实现简单可视化

Python爬虫豆瓣网热门话题保留文本本地数据,并实现简略可视化。前言明天给大家分享Python爬虫豆瓣网热门话题保留文本本地数据 开发环境:windows10python3.6.4 开发工具:pycharm库:requests、WordCloud、pandas、jieba 代码展现 词云生成 爬虫代码过程1、保留短评数据通过浏览器“查看”剖析,失去URL数据接口。在一直往下刷新页面的过程中,发现URL中只有“start”参数一直产生变动,顺次为0,20,40,60,80--- 同时,为了破解“豆瓣”的防爬虫机制,申请数据时需携带“申请头(headers)”中的“User-Agent”和“Referer”两个参数。 源码import requestsfor i in range(0,200,20): # 通过浏览器查看,失去数据的URL起源链接 url = 'https://m.douban.com/rexxar/api/v2/gallery/topic/125573/items?' \ 'sort=new&start={}&count=20&status_full_text=1&guest_only=0&ck=null'.format(i) # 破解防爬虫,带上申请头 # 这两个不能省略 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0".3809.100 Safari/537.36', 'Referer': 'https://www.douban.com/gallery/topic/125573/?from=gallery_trend&sort=hot'} # 发送申请,获取响应 reponse = requests.get(url, headers=headers) html = reponse.json() # 解析数据,取得短评 # 保留到本地 for j in range(19): abs = html['items'][j]['abstract'] with open("want_after.txt", "a", encoding='utf-8') as f: f.write(abs) print(abs)2、词云可视化把数据保留之后,须要利用“jieba”对数据进行分词;进而,通过分词后的数据绘制词云“wordcloud”,可视化展现数据。 from wordcloud import WordCloudimport matplotlib.pyplot as pltimport pandas as pdimport jieba# 取得wordcloud 须要的 文本格式with open("want_after.txt", "r", encoding='utf-8') as f: text = ' '.join(jieba.cut(f.read(),cut_all=False)) # print(text)backgroud_Image = plt.imread('豆瓣.jpg') # 背景图# 词云的一些参数设置wc = WordCloud( background_color='white', mask=backgroud_Image, font_path='SourceHanSerifCN-Medium.otf', max_words=200, max_font_size=200, min_font_size=8, random_state=50, )# 生成词云word_cloud = wc.generate_from_text(text)plt.imshow(word_cloud)plt.axis('off')wc.to_file('后果.jpg') ...

August 13, 2021 · 1 min · jiezi

关于python爬虫:Python爬虫鲁迅先生经典语录保存到Excel表格附源码

Python爬虫鲁迅学生《经典语录》保留到Excel表格(附源码)前言明天用Python 爬取鲁迅学生《经典语录》,间接开整~ 代码运行成果展现 开发工具Python版本: 3.6.4 相干模块 requests lxml pandas 以及Python自带的模块 思路剖析1、获取数据 通过“好句子迷”网站,获取网页。 http://www.shuoshuodaitupian.com/writer/128_1利用request模块,通过URL链接,获取html网页,下一步进行网页剖析。 其中,URL只有最初一部分产生扭转(1-10 :代表第1页--第10页的全部内容) # 1、获取数据headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " \ "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36", }for i in range(0, 9): url = "http://www.shuoshuodaitupian.com/writer/128_" + str(i + 1) # 1-10页 result = requests.get(url, headers=headers).content.decode() 2、解析数据通过Xpath语句解析,别离获取句子的内容、起源和评分等,如图所示。 把获取的每一组数据,放在一个字典里,再把字典追加到一个列表中。 源码: # 2、解析数据html = etree.HTML(result)div_list = html.xpath('//div[@class="item statistic_item"]')div_list = div_list[1:-1]for div in div_list: # 遍历每一条信息 item = {} # ./ 留神从以后节点,向下获取 item['content'] = div.xpath('./a/text()')[0] item['source'] = div.xpath('./div[@class="author_zuopin"]/text()')[0] item['score'] = div.xpath('.//a[@class="infobox zan like "]/span/text()')[0] item_list.append(item)print("正在爬取第{}页".format(i + 1))time.sleep(0.1)保留数据:把上述获取的数据放到一个列表中后,可通过pandas模块把数据类型转变为DataFrame,进而能够轻松地保留到excel文件中。为避免中文乱码,留神编码格局。3、保留数据df = pd.DataFrame(item_list) # 把数据存成csv文件df.to_csv('鲁迅经典语录.csv', encoding='utf_8_sig') # 保障不乱码依照评分进行排序之后的后果,如下图。 ...

August 12, 2021 · 1 min · jiezi

关于python爬虫:python-正则表达式-re-模块总结

孤单中,你能够取得所有,除了品格。—— 司汤达《红与黑》概述后面一篇文章 python应用正则表达式从json字符串中取出特定字段的值 简略应用了 re 模块的办法,然而对其余的办法并不相熟,为了更全面的理解和应用 python 中的 re,这里将本人学习的过程记录下来。 应用爬虫爬取网页数据的过程中,须要利用各种工具解析网页中的数据,比方:etree,BeautifulSoup,scrapy 等工具,然而性能最弱小的还是正则表达式,上面将对 python 的 re 模块办法做一个总结。 Python 通过 re 模块提供对正则表达式的反对。应用 re 的个别步骤是: 应用 re.compile(正则表达式) 将正则表达式的字符串模式编译为Pattern实例应用Pattern实例提供的办法解决文本并取得匹配后果(一个Match实例)应用Match实例取得信息,进行其余的操作一个简略的例子: # -*- coding: utf-8 -*-import reif __name__ == '__main__': # 将正则表达式编译成Pattern对象 pattern = re.compile(r'hello') # 应用Pattern匹配文本,取得匹配后果,无奈匹配时将返回None match = pattern.match('hello world!') if match: # 应用Match取得分组信息 print(match.group()) # 输入后果:hello 应用原生字符串定义正则表达式能够不便的解决转义字符的问题 原生字符串的定义形式为:r'' 有了原生字符串,不须要手动增加本义符号,它会主动本义,写进去的表达式也更直观。 1. 应用 rere.compile(strPattern[, flag]): 这个办法是Pattern类的工厂办法,用于将字符串模式的正则表达式编译为Pattern对象。 第一个参数:正则表达式字符串 第二个参数(可选):是匹配模式,取值能够应用按位或运算符'|'示意同时失效,比方 re.I | re.M。 可选值如下: re.I(re.IGNORECASE): 疏忽大小写(括号内是残缺写法,下同)M(MULTILINE): 多行模式,扭转'^'和'$'的行为S(DOTALL): 点任意匹配模式,扭转'.'的行为L(LOCALE): 使预约字符类 \w \W \b \B \s \S 取决于以后区域设定U(UNICODE): 使预约字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性X(VERBOSE): 具体模式。这个模式下正则表达式能够是多行,疏忽空白字符,并能够退出正文。以下两个正则表达式是等价的: ...

August 12, 2021 · 3 min · jiezi

关于python爬虫:临近秋招老油条带你一键爬取阿里百度字节大厂面试真题

前言本文爬虫源码已由 GitHub https://github.com/2335119327/PythonSpider 曾经收录(外延更多本博文没有的爬虫,有趣味的小伙伴能够看看),之后会继续更新,欢送Star。博主 长年游荡于牛客面经区,总结了字节、阿里、百度、腾讯、美团等等大厂的高频考题,然而明天,我教大家如何进行面经爬取,如果能帮到各位小伙伴,麻烦一件三连多多反对,感谢不敬!!! 本次爬取以Java面经为例,学会的小伙伴能够依照法则爬取牛客任意面经 教学进入Java面经区,关上控制台刷新申请 能够发现,发送浏览器中的URL,失去的响应内容是没有面经的,那么面经的数据从何而来???不要焦急,那么多申请咱们接着看! 往下滑,能够看见带json的申请,教训通知我就是这个申请 复制该URL,咱们去浏览器申请该URL,可发现咱们失去了面经的数据 然而,面经是JSON格局,咱们能够复制到在线json解析工具去查看,如下 能够看到data下的discussPosts下保留着所有的帖子即面经信息 然而这个json不像我以前见到的,这个json串没有间接保留帖子详情页的URL,然而咱们能够提供过拜访门路发现法则 能够看见拜访门路有个675866,就是对应json串中的postId,而前面的参数是能够省略的 小技巧想必单页面经是必定不能满足各位小伙伴的,那么如果进行多页爬取呢,不要焦急,我来为大家总结法则,也心愿小伙伴们能一键三连哦!!! 一样的套路,如下图是C++区域的面经JSON字符串,应该不必我多教了吧 残缺代码麻烦各位小伙伴关注公众号,后盾回复 ==爬取大厂面试题== 即可取得残缺源码 后续公众号也会只需公布优质博文,不容爬虫小伙伴们错过哦! 后果展现 最初我是 Code皮皮虾,一个酷爱分享常识的 皮皮虾爱好者,将来的日子里会不断更新出对大家无益的博文,期待大家的关注!!! 创作不易,如果这篇博文对各位有帮忙,心愿各位小伙伴能够==一键三连哦!==,感激反对,咱们下次再见~~~ ==分享纲要== 大厂面试题专栏Java从入门到入坟学习路线目录索引开源爬虫实例教程目录索引更多精彩内容分享,请点击 Hello World (●'◡'●) 本文爬虫源码已由 GitHub https://github.com/2335119327/PythonSpider 曾经收录(外延更多本博文没有的爬虫,有趣味的小伙伴能够看看),之后会继续更新,欢送Star。

July 12, 2021 · 1 min · jiezi

关于python爬虫:Python爬虫小白教学篇豆瓣93超高评分觉醒年代热评爬取生成精美词云

精美词云 《沉睡年代》热评爬取解说 点击好评 多页爬取解说 热评爬取剖析一个热评对应一个class值为comment-item的div标签 所以咱们只需获取全副class值为comment-item的div标签即可获取以后页面全副热评 然而,热评具体又存储在class值为comment-itemdiv标签下的class值为short的span标签下 所以咱们只需获取全副class值为short的span标签即可获取以后页面全副热评 spans = data.find_all(class_="short")for i in spans: global_text += ",".join(jieba.cut(str(i.text).strip())) 残缺代码import matplotlib.pyplot as pltimport wordcloudimport jiebafrom imageio import imreadimport requestsfrom bs4 import BeautifulSoupglobal_text = ""def getDetail(data): global global_text data = BeautifulSoup(data,"html.parser") spans = data.find_all(class_="short") for i in spans: global_text += ",".join(jieba.cut(str(i.text).strip())) # 对获取到的热评分词def toWordCloud(): global global_text mask = imread("./9.png") #设置背景图 wcd = wordcloud.WordCloud( font_path="C:\Windows\Fonts\msyh.ttc", background_color='white', #设置背景色彩 random_state=80, # 色彩品种 mask=mask) wcd.generate(global_text) wcd.to_file("res.jpg") #保留为图片 plt.imshow(wcd) plt.axis('off') plt.show()if __name__ == '__main__': headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64" } url = 'https://movie.douban.com/subject/30228394/comments?percent_type=h&start={}&limit=20&status=P&sort=new_score' for i in range(6,10): new_url = url.format(i * 20) response = requests.get(url=url,headers=headers) response.encoding = 'utf-8' getDetail(response.text) toWordCloud()最初我是 Code皮皮虾,一个酷爱分享常识的 皮皮虾爱好者,将来的日子里会不断更新出对大家无益的博文,期待大家的关注!!! ...

July 12, 2021 · 1 min · jiezi

关于python爬虫:为什么隧道代理没有更换IP

转载:为什么你的隧道代理没有更换IP 有局部小伙伴反馈在客户端应用隧道代理动静版(每次申请更换IP) 的过程中发现没有更换IP,遂狐疑是咱们隧道代理服务器的问题,其实不然。明天咱们就在这里谈谈,为什么会有隧道代理会呈现没有更换IP的状况。 长久连贯须要理解,HTTP/1.1(以及 HTTP/1.0 的各种加强版本)容许 HTTP 在申请解决完结之后将 TCP 连贯放弃在关上状态(并不会立刻敞开),以便为将来的 HTTP 申请重用之前建设的连贯。在申请解决完结之后依然放弃在关上状态的 TCP 连贯被称为长久连贯。而非长久连贯则会在每个申请完结之后敞开。长久连贯会在不同申请之间放弃关上状态,直到客户端或服务端决定将其敞开为止。重用已对指标服务器关上的闲暇长久连贯,就能够避开迟缓的连贯建设阶段。而且,曾经关上的连贯还能够防止慢启动的拥塞适应阶段,以便更疾速地进行数据的传输。 HTTP客户端举例通过下面的内容咱们理解到,开启Keep-Alive能够更疾速的进行数据传输。最常见的应用场景就是浏览器在关上一个网页,并不会为了每个资源都开打一个TCP连贯,而是会同时关上大量TCP连贯,利用Keep-Alive机制,一直利用大量连贯传输少数HTTP申请。因为去除了进行连贯和敞开连贯的开销,因而放慢访问速度。 在一些编程语言开发的HTTP客户端,爬虫框架中,除了会应用异步形式发送申请,也会应用TCP连贯复用来减速解决使用者的申请。 Python-Requests应用Requests提供的Session发送申请时,除了会主动保留cookie,还会应用urllib3底层提供的connection-pooling(连接池) 例如利用requests-session配置隧道代理动静版间断发送3个申请并打印出以后应用的代理IP import timeimport requests username = "txxxxxxxxxxxxx"password = "password"tunnel = "tpsXXX.kdlapi.com"proxies = { "http": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": tunnel}, "https": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": tunnel}}s = requests.session()for i in range(3): res = s.get('https://dev.kdlapi.com/testproxy', proxies=proxies) print(res.text) time.sleep(1)sucess! client ip: 175.7.196.238 sucess! client ip: 175.7.196.238 sucess! client ip: 175.7.196.238 能够发现三次都是同一个IP,并且应用Wireshark抓包查看,很显著这三次申请都走了一个TCP连贯。 ...

July 7, 2021 · 1 min · jiezi

关于python爬虫:python爬取中国天气网7天天气并保存至本地

1.中国天气网http://www.weather.com.cn/weather/101010100.shtml 2.剖析页面 3.浏览器-F12-定位查看元素嵌套关系 4.导入须要的库 import requestsfrom bs4 import BeautifulSoupimport re5.代码局部 result_list_wt = []def get_page(url): try: kv = {'user-agent':'Mozilla/5.0'} r = requests.get(url,headers = kv) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return 'error'def parse_page(html, return_list): soup = BeautifulSoup(html, 'html.parser') day_list = soup.find('ul', 't clearfix').find_all('li') for day in day_list: date = day.find('h1').get_text() wea = day.find('p', 'wea').get_text() if day.find('p', 'tem').find('span'): hightem = day.find('p', 'tem').find('span').get_text() else: hightem = '' lowtem = day.find('p', 'tem').find('i').get_text() win = re.findall('(?<= title=").*?(?=")', str(day.find('p','win').find('em'))) wind = '-'.join(win) level = day.find('p', 'win').find('i').get_text() return_list.append([date, wea, lowtem, hightem, wind, level])def print_res(return_list): tplt = '{0:<10}\t{1:^10}\t{2:^10}\t{3:{6}^10}\t{4:{6}^10}\t{5:{6}^5}' result_list_wt.append(tplt.format('日期', '天气', '最低温', '最低温', '风向', '风力',chr(12288))+"\n") for i in return_list: result_list_wt.append(tplt.format(i[0], i[1],i[2],i[3],i[4],i[5],chr(12288))+"\n") def main(): # 城市-城市码txt files = open('city_list.txt',"r") city_name_id = files.readlines() try: # 获取txt-list for line in city_name_id: name_id = line.split('-')[1].replace("['","").replace("\n","") url = 'http://www.weather.com.cn/weather/'+name_id+'.shtml' city_name = line.split('-')[0].replace("['","").replace("\n","") city_china = "\n"+"城市名 : "+city_name+"\n" result_list_wt.append(city_china) html = get_page(url) wea_list = [] parse_page(html, wea_list) print_res(wea_list) files.close() except: print("error") # 将获取后果写入到文件内 msgs = ''.join(result_list_wt) print(msgs) with open('weather.China.txt',"w+") as file: file.write(msgs) if __name__ == '__main__': main()6.city_list.txt ...

June 2, 2021 · 1 min · jiezi

关于pyspider:python爬虫pyspider的第一个爬虫程序大功告成

对于pyspider的装置返回查看前序文章《踩坑记:终于怀着忐忑的情绪实现了对 python 爬虫扩大库 pyspider 的装置》 1、启动pyspider服务1pyspider all2、创立pyspider我的项目 3、我的项目区域阐明 4、从百度首页开始爬取填写百度首页地址点击run开始爬取,点击爬取到的链接执行下一步 任意点击爬取到的链接进入下一步爬取 返回所进入的详情页内容 5、代码编辑区函数 1#!/usr/bin/env python 2# -*- encoding: utf-8 -*- 3# Created on 2021-04-10 11:24:26 4# Project: test 5 6from pyspider.libs.base_handler import * 7 8# 解决类 9class Handler(BaseHandler):10 # 爬虫相干参数配置,全局失效(字典类型)11 crawl_config = {12 'url':'http://www.baidu.com'13 }1415 # 示意每天一次,minutes单位为分钟16 @every(minutes=24 * 60)17 # 程序入口18 def on_start(self):19 # 设置爬虫地址20 self.crawl('http://www.baidu.com', callback=self.index_page)2122 # 示意10天内不会再次爬取,age单位为秒23 @config(age=10 * 24 * 60 * 60)24 # 回调函数、数据解析25 def index_page(self, response):26 # response.doc() 返回的是pyquery对象,因而采纳pyquery对象解析27 for each in response.doc('a[href^="http"]').items():28 # 遍历并回调爬取详情页29 self.crawl(each.attr.href, callback=self.detail_page)3031 # 工作优先级设置32 @config(priority=2)33 # 回调函数、返回后果34 def detail_page(self, response):35 # 返回详情页36 return {37 "url": response.url,38 "title": response.doc('title').text(),39 }更多精彩返回微信公众号【Python 集中营】,专一于 python 技术栈,材料获取、交换社区、干货分享,期待你的退出~ ...

April 11, 2021 · 1 min · jiezi

关于python爬虫:踩坑记终于怀着忐忑的心情完成了对-python-爬虫扩展库-pyspider-的安装

在后面的系列文章中,笔者说了一些爬虫入门的相干知识点以及一些比拟根本的爬虫办法和简略的框架应用等。下一个环节我么一起来看看 pyspider 框架。首先,这款框架的装置就非常令人头疼,破费了好几个小时原本要和女朋友聊天的工夫,老王通过一直的踩坑终于装置胜利了,所以,特地记录一下。 1、pyspider介绍 一个国人编写的弱小的网络爬虫零碎并带有弱小的WebUI。 采纳Python语言编写,分布式架构,反对多种数据库后端,弱小的WebUI反对脚本编辑器,工作监视器,我的项目管理器以及后果查看器。 http://docs.pyspider.org/en/l... 2、根底装置环境介绍 操作系统:Windows10 python 环境:python3.6.8 操作人:老王的小跟班 3、筹备扩大库工具 1# 因为phantomjs官网下载太慢,能够到国内镜像站进行下载 2 3http://npm.taobao.org/dist/phantomjs/ 4 5phantomjs(版本=2.1.1,反对javascript操作) 6 7wheel(反对.whl文件装置) 8 9# pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl下载地址1011https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl1213pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl(装置pycurl扩大库)1415wsgidav(版本=2.4.1)1617werkzeug(版本=0.15) 4、开始装置 pyspider 1a.装置phantomjs 2 3# 下载好phantomjs之后,解压之后配置好环境变量 4 5b.装置wheel 6 7python -m pip install wheel 8 9c.装置下载好的pycurl扩大库1011python -m pip install c:/tools/pycurl-7.43.0.4-cp36-cp36m-win_amd64.whl1213d.装置wsgidav依赖库1415# 先卸载以后高版本1617python -m pip uninstall wsgidav1819# 装置指定低版本2021python -m pip install wsgidav=2.4.12223e.装置werkzeug2425# 先卸载以后高版本2627python -m pip uninstall werkzeug2829# 装置指定低版本3031python -m pip install werkzeug=0.153233f.最初装置pyspider3435python -m pip install pyspider5、启动问题 1a.间接启动 2 3pyspider all 4 5b.启动中如果呈现始终在 restarting的状况 6 7# 解决方法:关上一个终端,输出命令启动。再关上一个新的终端启动,此时再敞开第一个终端,第二个终端会启动胜利。 8 9# 为什么?我也不晓得,这是在 Google 上找的解决办法。1011c.第一次启动的工夫比拟长1213d.启动胜利之后拜访地址1415http://localhost:50001617e.启动之后敞开终端,代表pyspider服务也会敞开更多精彩返回微信公众号【Python 集中营】,专一于 python 技术栈,材料获取、交换社区、干货分享,期待你的退出~

April 10, 2021 · 1 min · jiezi

关于python爬虫:requestsBeautifulSoup页面爬取数据对比测试

本文首发于:行者AIQ:BeautifulSoup不是爬虫用的吗,为什么要应用它来做测试? A:在日常工作中会遇到很多数据比照的测试工作,在后端接口有做数据加密,或接口有做鉴权等状况下,咱们再从后端去取参数,消耗的工夫老本有点大。 所以我想...能不能走前端页面下来获取数据呢,网上查了下,果然有从前端页面上爬取数据的工具包,简略学习了下,也算是本人做个笔记记录下。明天咱们次要用到的是requests + BeautifulSoup 以及其余一些工具包来实现该性能。 1. 什么是BeautifulSoup?首先做个介绍,BeautifulSoup是python的一个库,最次要的性能是从网页抓取数据。 其官网解释如下: BeautifulSoup提供一些简略的、python式的函数用来实现导航、搜寻、批改分析树等性能。它是一个工具箱,通过解析文档为用户提供须要抓取的数据,因为简略,所以不须要多少代码就能够写出一个残缺的应用程序。BeautifulSoup主动将输出文档转换为Unicode编码,输入文档转换为utf-8编码。你不须要思考编码方式,除非文档没有指定一个编码方式,这时,BeautifulSoup就不能自动识别编码方式了。而后,你仅仅须要阐明一下原始编码方式就能够了。在理解了该工具包的作用后,咱们写几行代码来简略学习下,咱们就以此网站来做练习吧。 http://www.cntour.cn/ 2. 如何应用BeautifulSoup?2.1 应用该工具的话须要装置对应的环境依赖包,CMD执行以下命令:pip install beautifulsoup4pip install lxml图1. BeautifulSoup环境装置 2.2 在环境装置实现后,咱们来写个小例子用浏览器关上http://www.cntour.cn/ 图2. 待爬取页面信息展现 定位咱们想获取的数据信息,通过element查找该元素。 在复制元素的selector后,编写如下代码: from bs4 import BeautifulSoupimport requestsimport reurl = 'http://www.cntour.cn/'strhtml = requests.get(url)soup = BeautifulSoup(strhtml.text, 'lxml')data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a')print(data)通过BeautifulSoup咱们能够获取到html对象,应用lxml解析器后,打印data后可见如下信息: 图3. 获取标签信息 2.3 获取到html对象后,接下来咱们获取整组数据,用于便遍历获取该页面上的题目,连贯和ID从新获取html对象,将<li>标签后的nth-child(1)删除,再从新执行代码。 from bs4 import BeautifulSoupimport requestsimport reurl = 'http://www.cntour.cn/'strhtml = requests.get(url)soup = BeautifulSoup(strhtml.text, 'lxml')# data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a')# print(data)data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a')print(data)这样咱们就获取到了html页面,列表上所有的数据对象。 ...

March 30, 2021 · 1 min · jiezi