第一篇博客(python爬取小故事网并写入mysql)

  • 前言:

  这是一篇来自整理EVERNOTE的笔记所产生的小博客,实现功能主要为用广度优先算法爬取小故事网,爬满100个链接并写入mysql,虽然CS作为双学位已经修习了三年多了,但不仅理论知识一般,动手能力也很差,在学习的空余时间前前后后DEBUG了很多次,下面给出源代码及所遇到的BUG。

  本博客参照代码及PROJECT来源:http://kexue.fm/archives/4385/


  • 源代码:
 1 import requests as rq
 2 import re
 3 import codecs
 4 import queue
 5 import pymysql
 6 from urllib.request import urlopen
 7 from bs4 import BeautifulSoup
 8
 9 tasks = queue.Queue()  # 链接队列
10 tasks_pass = set()  # 已队列过的链接
11 results = {}  # 结果变量
12 count = 0  # 爬取页面总数
13 tasks.put(‘/index.html‘)  # 把主页加入到链接队列
14 tasks_pass.add(‘/index.html‘)  # 把主页加入到已队列链接
15 db = pymysql.connect("localhost","testuser","test123","TESTDB",charset=‘gbk‘)
16 dbc = db.cursor()
17
18 while count<=100:
19     url = tasks.get() #取出一个链接
20     url = ‘http://wap.xigushi.com‘+url
21     web = rq.get(url).content.decode(‘gbk‘) #这里的编码要看实际情形而定
22     urls = re.findall(‘href="(/.*?)"‘, web) #查找所有站内链接
23     for u in urls:
24         if u not in tasks_pass: #把还没有队列过的链接加入队列
25             tasks.put(u)
26             tasks_pass.add(u)
27     html=urlopen(url)
28     bsObj=BeautifulSoup(html.read(),"lxml")
29     if not (re.search(‘images‘,url)):
30         # print(re.search(‘images‘, url))
31         text=bsObj.title.get_text()
32         print(url + ‘   ‘ + text)
33         sql = "insert into data1(url,title) values(%s,%s);"
34         data=(url,text)
35         dbc.execute(sql,data)
36         db.commit()
37     else:
38         if (re.search(‘images‘,url).span()):
39             print(‘---------------------------skipping--------------------------------------------‘)
40     count += 1
41 db.close()
42
43 with codecs.open(‘results.txt‘, ‘w‘, encoding=‘utf-8‘) as f:
44         f.write(‘\n‘.join(results.items()))

  • 备注:

  原PROJECT采取多线程并写入MongoDB,我因为还不熟悉多线程,采取了单线程,出于对mysql的偏好和熟悉选取了mysql。


  • BUG:
  1. 编码问题:
    小故事网的编码是GB2312,可以从网页源代码的META标签中读出,因为GBK向下与GB2312兼容,所以可以用GBK解码。值得注意的是,mysql默认编码为latin-1,遇到编码问题时,在google时给出的答案都是UTF-8,但在将mysql字符集改为UTF-8后,pycharm读取正常,但mysql显示还是乱码,需要将其改为GBK才可以,虽然在猜想UTF-8应该兼容GBK才对...在对mysql修改字符集的时候,又反复操作了几次,才发现原来有数据库、表、字段的区别...最终都改了...
    修改mysql字符集这个网站讲得很好:http://fatkun.com/2011/05/mysql-alter-charset.html
  2. 正则表达式匹配问题:
    代码主要是为了爬取链接和对应的标题,但在碰到图片的时候就会报错,这时打算写个正则过滤掉,没想到写出来了没反应...最后只能加了个判断过滤...coding仍需加强...
时间: 2024-10-03 14:41:47

第一篇博客(python爬取小故事网并写入mysql)的相关文章

第一篇博客——python学习旅程开启

今天开始学习Python,以后会将自己的学习内容以及学习心得进行记录,以博客的形式和广大志同道合的朋友分享,如有错误还请大家能够批评指正,如果能帮到大家那就再好不过了. 今天的内容有些长,而且很简单,纯属是为了给自己回顾而写,加深印象,所以不接受吐槽. 在进入正式的python学习之前,你要知道的是python是一门动态解释型的强类型定义语言. 我们先来了解一下动态语言和静态语言的区别.动态类型语言是在运行时确定数据类型的语言,即永远不需要给任何变量指定数据类型.静态类型语言是指在编译时变量的数

第一篇博客------致自己

我为什么在博客园开博? 2019年5月10日,我在博客园写下自己的第一篇博客,用以记录和促进自己的技术成长.同时也希望自己的记录能给需要的人带来点启示. 我的博客将由以下几个分类的文章组成: 编程语言:到目前为止开发主要用Java,涉猎Java.Python.JQuery.js等.这个分类将会分享一些编程过程中理解到的小trick.值得借鉴的代码等. Lunix操作:学号Lunix操作真的是会收益终身的事情,而且装逼属性Max.这个模块主要会分享一些Lunix相关的技巧. 数据库:数据库是开发过

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文 1.前言 最新在公司做一个项目,需要一些文章类的数据,当时就想到了用网络爬虫去一些技术性的网站爬一些,当然我经常去的就是博客园,于是就有下面的这篇文章. 2.准备工作 我需要把我从博客园爬取的数据,保存起来,最好的方式当然是保存到数据库中去了,好了我们先建一个数据库,在来一张表,保存我们的数据,其实都很简单的了啊,如下图所示 BlogArticleId博文自增ID,BlogTitle博文标题,BlogUrl博文地

第一篇博客:一个双色球游戏 、以及个人介绍

一.双色球小游戏 双色球类(6红1蓝): 1 package top.liaoyingpeng.bean; 2 3 import java.util.Arrays; 4 5 public class Balls { 6 private int[] red = new int[6]; 7 private int blue; 8 private BallBox makeBy; 9 10 // 全机器生成 11 protected Balls(BallBox bx) { 12 makeBy = bx;

第一篇博客,希望是一个好的开始

博客园"占座位" 因为学习专业的原因,经常浏览博客学习和解惑.在前辈们的作品中学到了很多,也感受到了很多.通过博客的方式去分享知识和记录自己的成长.这种积极向上的,乐于分享的精神,让我很受鼓舞.我时刻准备着加入这一大军的行列.于是我就注册了个账号,呵呵. 第一篇博客 经常会突发奇想的计划着怎么怎么样,却在行动的时候虎头蛇尾了,很难坚持作下去.这或许是很多人都存在的问题.在别人博客上看到:"或许写博客是一个不错的方法".通过博客,经常来记录一下自己的学习,分享一下自己

第一篇博客《import tensorflow的问题解决》

在jupyter notebook中死活无法import jupyter 搞了很久,最后是解决了,过程如下: 1)安装anaconda3 4.2.0版本 2)解决activate tensorflow问题 3)解决import tensorflow问题 以下就两个方面进行详细记录: 1)activate tensorflow失败问题 https://www.cnblogs.com/lvsling/p/8672404.html 根据以上文章操作,解决了激活tensorflow的问题,上述文章我是只

我的第一篇博客——oracle数据库安装

来分享我的第一篇博客,关于oracle数据库安装. 文章也是借鉴其他博主发表的文章内容,只是自己用来做下记录,以便日后之需. 下面进入正题...... 方法/步骤 1.大家可以根据自己的操作系统是多少位(32位或64位)的,到官网下载相应的安装程序,如下图所示.有一点需要注意,Oracle的安装程序分成2个文件,下载后将2个文件解压到同一目录即可.  (这里下载的安装程序需要到oracle官网上下载:https://www.oracle.com/database/technologies/ora

我的第一篇博客 —— 用 js 和 css 简单实现瀑布流布局

一个拖延症晚期患者的自述: 注册了博客快一个月了,终于要迎来我的第一篇博客了哈哈哈!!! 刚注册的时候,满脑子要频繁更新,扩充自己的知识库,一到真正落实,就不得不为懒惰屈服,还好有了学习计划,以后应该会每周一更(不更当我没说).当然了,肯定是希望被更多人看到,帮助到大家,如果没人看的话就当作是自己的积累与记录吧! 还有,我目前工作是前端工程师,还是一名刚入行不久的菜鸟哈哈哈!!!现在主要目标是先把前端知识巩固好,再逐步往全栈领域发展(毕竟装13是我一生的职责). 所以,请各位大佬们多多指教,如果

第一篇博客——基于数组的优先队列(java版)

看过园子里和CSND上那么多大牛精彩的博客后,早就按捺不住想亲手写上几篇.奈何每次坐在电脑前准备敲字的时候,立马赶到浑身不自在,无从下手.实在是因为自高考之后,大学以来,本人几乎就再没动笔写过一篇文字,写作水平退化实在严重.今天鼓起勇气开始写作博客,一方面希望通过多写慢慢地找回写作的感觉,一方面也希望通过博客和大家多多交流,共同进步. 既然是第一次试手,就写个简单易懂的内容——优先队列. 话不多说,先上代码. 1 /** 2 * @author Mr Left 3 * @version 1.0