专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
道与术抓妖  ·  模仿去年5.6月份的创业板风格化——6.8 ·  18 小时前  
道与术抓妖  ·  模仿去年5.6月份的创业板风格化——6.8 ·  18 小时前  
爱否科技  ·  iPhone 17 ... ·  昨天  
东方财富网  ·  干货!一图看懂A股重要指数 ·  2 天前  
爱否科技  ·  【广告】爱否回收,欢迎比价 ·  5 天前  
51好读  ›  专栏  ›  爬虫俱乐部

如何将Python爬到的数据保存到MySQL中

爬虫俱乐部  · 公众号  ·  · 2018-08-07 08:15

正文

请到「今天看啥」查看全文



from random import randint
import time def getHTMLText(url):
while True :
try :               r = requests.get(url, timeout = 30 )               r.encoding = r.apparent_encoding
return r.text
except Exception as e:               print(e)               print( "重新连接..." )      time.sleep(randint( 1 , 3 ))

这里加入了 try/except ,如果出现了如网页连接超时,网络中断等问题时,会输出不能成功抓取的原因,并随机休息 1-3 秒,而加入 while True 则保证了未成功抓取时会一直反复尝试,直到成功。

2.2抓取一个网页的信息

我们在源代码中查找相应的信息所在的位置,并用正则表达式匹配出来:

def gethtmlinfo(url):
    html = getHTMLText(url)
    data = {}#创建一个空的字典用于存放
   data['title'] = re.findall(r'

(.*?)

'
, str(html))[0]    data['laiyuan'] = re.findall(r'来源:(.*?)', html)[0]    data['zuozhe'] = re.findall(r'作者:(.*?)', html)[0]    data['fabu'] = re.findall(r'发布日期:(.*?)', html)[0]    data['liulan'] = re.findall(r'浏览数:(\d+)', html)[0]    data['neirong'] = re.sub(r'<.>|[\r\n\u3000]','',re.findall(r'
(.*?)
',html,re.S)[0])    data['tupian'] = 'http://www.cgw.gr' + re.findall(r', html)[0]
   return(data)

值得注意的是,查看新闻内容的源代码,每一段内容都是分开给出的。

因此在抓取内容时,我们添加参数:re.S,它的作用使得“.”能匹配的范围扩展到整个字符串,包括“\n”,也就是说它可以跨行进行匹配。由于使用正则匹配出来的结果以列表显示,所以以[0]选出字符串,另外,re.sub(r'<.>|[\r\n\u3000]','',html)表示将制定字符串替换为空。另外,由于源代码中图片给出的链接不完整,因此将其补全。

最后输出结果为:


3.将上一步得到的字典传入MySQL

构建一个函数pymysql将数据传到xizhongwang这个表中。

def pymysql(data):
    table = 'xizhongwang'
   keys = ','.join(data.keys())    values = ', '.join(['%s'] * len(data))    cursor = db.cursor()    sql = 'replace INTO {table} ({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
   try:          if cursor.execute(sql, tuple(data.values())):              print('Successful')              db.commit()
   except:           print('Failed')           db.rollback()

我们会在程序运行结果窗口看到“Successful”,然后再去MySQL中看看我们的数据是否传到xizhongwang表:



注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!







请到「今天看啥」查看全文