这是0717推送的补档
当时忘了声明原创了
不过这个封面会不会被锤哦。。。(瑟瑟发抖)
-这是喵星的第1个BUG-
随手记录一下这段时间和Python的斗争史
其实早在去年9月就下了一个Py2.x,信誓旦旦地说就算没人逼我我也要写出代码
一年过去了,果然啥都没写
//这你都好意思说?
//还特喵把字调小一号假装没人发现???
实习组用Py 3.6,本来想着,都是Python,要配置的环境啥的照做就好,然后...BoomShakalaka
//具体炸法忘了,总之很惨
//等等,我现在在写python
#那我换个注释
默默重装Python,有生之年第一次自己用cmd
#论家里有程序员的用进废退
并面对一个小破功能构建了一整天,最后在学长提示下五分钟写完
#不过当时自己确实不知道List.index()这个方法
# -*- coding: utf-8 -*-
import sys
import time
sys.path.append('./NLP')
# 我居然还写了文档
#喵的看着真特喵羞耻
'''
@function: get synonym of a word
@input: name
@output: name in synonyms? standard name:name
@params:
a[]:all synonyms
b[]:indexes of standard names
@methods:
init: init a & b
synonym: find standard name
@search_standard
search_standard: find index of standard name
'''
# init
file = open("synonym.txt", 'r', encoding='UTF-8', errors='ignore')
a = [] # all synonyms
b = [0] # index of standard names
i = 0
for line in file:
line = line.strip('\n')
names = line.split(" ")
for name in names:
a.append(name)
i = i + 1
pass
b.append(i)
pass
b.pop()
# search
def synonym(key):
try:
n1 = a.index(key) # index of name
n2 = search_standard(b, n1) # index of standard name
key = a[n2]
except ValueError as e:
pass
return key
def search_standard(array, key):
first = 0
last = len(array) - 1
found = False
while first
mid = (first + last) // 2
if array[mid] == key:
found = True
return array[mid]
else:
if key
last = mid - 1
else:
first = mid + 1
pass
return array[first - 1]
# test code
if __name__ == '__main__':
l = ["差异", "毛利率", "研发经费", "每股现金流", "摊薄每股收益", "投资方式", "稀释每股收益"] * 50000
start = time.time()
for item in l:
snn = synonym(item)
end = time.time()
print(end - start)
print(snn)
之后接了代码重构的任务
#慢慢倒腾的那种
据说是因为,我以后要在那些代码的基础上写新代码 and 刚好有这个任务
#博仁学长:代码重构的最佳人选难道不是。。(看向带我的学长)
'''
带我的学长:你只要把每个函数写成15行以内就好
我:怎么这么严格
学长:boss本来要我写成10行的,我给你放水了
(然后我默默地回去写代码了)
'''
现在又接了爬网站的任务
然而啥都不会还学习能力极差(耿直脸)
陷入僵局时被麻麻丢给隔壁IT民工部包工头,然后又被丢给某爬虫大佬
#能接到这种奇怪的项目,大概可以去买彩票了
现在重构这件事已经被我忘记了,这两天一直在折腾要交付的爬虫和准备探索的东西
#这么一说我自己好像也是个爬虫
#大概还要加个内置AI?
#不过就我这个运行效率,我的开发人员怕是已经转行了
#等等我麻麻还真转行了
最近准备爬的内容:
爬虫相关:
Beautiful Soup
Requests
HTML5
一些数据库相关,用于传入爬下来的结果
更多杂货:
JavaScript,或任意网页编程语言
(此处是不是应该cue老爹买的口水书)
Selenium
Scrapy
BloomFilter
Redis
XPath
Django
SOLID Refactoring
Flutter.io
大佬留给我的代码
# -*-encoding:utf-8-*-
import sys
import requests
import re
import traceback
from bs4 import BeautifulSoup
# emm py3里面好像不是这么叫的
reload(sys)
sys.setdefaultencoding(u"utf-8")
# 这里以及后面所有的u''都是为了声明编码是utf,不然虽然读下来的中文是对的,但会显示成乱码
class Search:
# 我至今都不明白为啥非oop要搞这个,但辣个大神习惯性写了这个,看起来他挺规范的
def __init__(self):
pass
def search(self, url):
resp = requests.get(url) # 这时候网页的源代码就被你抓下来啦
soup = BeautifulSoup(resp.content, u"html5lib") # 汤会把那一大串字符串转换成可以按node查找的神奇对象
try: # 程序一旦出错就会停止,所以为了保证出错还能继续产出,用一个ex解决
uls = soup.find(u"ul", class_=u"items_border").find_all(u"li", class_=u"item") # 现在uls里面就都是那一大堆并列的问答啦
# find,findall都是查找,针对一个和多个
# 第一个参数是哪个括号叫啥,第二个参数是里面的关键字
# 一般用class,没有class,id也可以
# 但网页很容易改变,慎用id
except: # 这里理论上是要有发送错误日志这一步的,出的error都要记录整理分析
print(traceback.print_exc()) # 然而我太懒了
for ul in uls:
try:
question = ul.find(u"div", class_=u"question").find(u"span", class_=u"area qa_content_limit").text
except:
print(traceback)
try:
answer = ul.find(u"div", class_=u"answer").find(u"span", class_=u"area qa_content_limit").text
except:
print(traceback)
# print question
# print answer
tags = soup.find(u"span", class_=u"pagernums").find_all(u"a")
for tag in tags: # 这一组按钮既没有id也没有class,数量不大就走循环了
if tag.text == u"下一页": # 找到下一页
herf = u"http://guba.eastmoney.com" + tag[u"href"] # 拼凑出url,一般在那一片的代码里有
print(herf) # 如果这里是JavaScript,那前端把url隐藏了,执行翻页操作并用network监测说不定有救
if herf != u"http://guba.eastmoney.comjavascript:": # 翻到最后一页就可以观察特性,写出相应的‘阻止无限翻页‘的代码啦
self.search(herf) # 递归法翻页,还有别的方法
# 翻页我会的也不多。。走一步算一步吧_(:з」∠)_
if __name__ == u"__main__":
url = u"http://guba.eastmoney.com/qa/qa_search.aspx?company=300059&keyword=&questioner=&qatype=1&page=1"
Search().search(url)
16岁的最后一天
提前祝自己生日快乐。