Rumah > Soal Jawab > teks badan
新入门做的一个爬取文段程序,代码看起来比较臃肿,请问有没有什么好的建议呢?
另外我准备在for循环末尾把数据插入mysql数据库,这样做好吗,还是说再弄一个for循环,第一个for循环把数据存进二维列表里,第二个循环再逐条插入数据呢?
#-*- coding:utf-8 -*- import re from pyquery import PyQuery as pq import time #过滤html标签 def stripTag(x): return re.sub('<(.*?)>','',str(x)) #转换时间戳 def timeStamp(x): return time.mktime(time.strptime(x,'%Y-%m-%d %H:%M')) #获取网页局部源码 d = pq(url='http://www.juexiang.com/list/1017') d = pq(d('.left').html()) x = d('div.arttitle') #匹配时间格式 pattern = re.compile(r"[0-9]{4}(.*)[0-9]{2}") #for循环获取标题、作者、时间 for i in x: a = pq(pq(i).html()) title = stripTag(pq(a('a').eq(0).text())) author = stripTag(pq(a('a').eq(1).text())) time1 = str(pq(a('span').eq(2).text())) time1 = timeStamp((pattern.search(time1)).group()) print(title,'\t',author,'\t',time1,'\n')
三叔2016-11-08 12:42:30
如果还在for循环里添加数据库操作,那代码看起来就很丑了,其实每一部分都可以分成函数或建类来处理,
比如
1.获取网页内容和过滤html标签可以建一个函数
def get_page(url): pass
2.获取时间戳和转换时间戳可以合并在一个函数中
def handld_time(): pass
3.获取标题、作者、时间可用一个函数处理
def get_article_content(): pass
这样函数可以复用,并且调用起来十分方便灵活,因为这只是一个小程序,用几个函数重构就可以达到效果了