Maison > Questions et réponses > le corps du texte
新入门做的一个爬取文段程序,代码看起来比较臃肿,请问有没有什么好的建议呢?
另外我准备在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
Si vous ajoutez également des opérations de base de données dans la boucle for, le code aura l'air moche. En fait, chaque partie peut être divisée en fonctions ou classes à gérer,
Par exemple,
1. et filtrer les balises html peuvent créer une fonction
def get_page(url):
pass
2. L'obtention d'horodatages et la conversion d'horodatages peuvent être combinées en une seule fonction
def handld_time():
pass
3. L'obtention du titre, de l'auteur et de l'heure peut être traitée avec une fonction
def get_article_content():
pass
Cette fonction peut être réutilisée, et elle est très pratique et flexible à appeler, car il ne s'agit que d'un petit programme, et l'effet peut être obtenu en refactorisant quelques fonctions