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('p.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')
巴扎黑2017-04-18 09:54:46
Jika anda turut menambah operasi pangkalan data dalam gelung for, kod itu akan kelihatan hodoh, sebenarnya, setiap bahagian boleh dibahagikan kepada fungsi atau kelas untuk dikendalikan,
Contohnya,
1 dan tag html penapis boleh mencipta fungsi
def get_page(url):
pass
2. Mendapatkan cap masa dan menukar cap masa boleh digabungkan dalam satu fungsi
def handld_time():
pass
3. Mendapatkan tajuk, pengarang dan masa boleh diproses dengan fungsi
def get_article_content():
pass
Dengan cara ini, fungsi boleh digunakan semula, dan ia sangat mudah dan fleksibel untuk dipanggil, kerana ini hanyalah program kecil, dan kesannya boleh dicapai dengan membina semula dengan beberapa fungsi