我写了17天Python……

这是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

# print

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岁的最后一天

提前祝自己生日快乐。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180720G1WBDU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券