=====================爬虫原理=====================

通过Python访问新闻首页,获取首页所有新闻链接,并存放至URL集合中。

逐一取出集合中的URL,并访问链接获取源码,解析出新的URL链接添加到集合中。

为防止重复访问,设置一个历史访问,用于对新添加的URL进行过滤。

解析DOM树,获取文章相关信息,并将信息存储到Article对象中。

将Article对象中的数据通过pymysql保存到数据库中。

每完成一次数据的存储,计数器增加并打印文章标题,否则打印错误信息。

如果集合中的URL全部读取完或数据数量达到设定值,程序结束。

=====================存储结构=====================

CREATE TABLE `news` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`title` varchar(45) NOT NULL,
`author` varchar(12) NOT NULL,
`date` varchar(12) NOT NULL,
`about` varchar(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url_UNIQUE` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

=====================脚本代码=====================

'''
百度百家新闻收集
''' import re # 网络连接模块
import bs4 # DOM解析模块
import pymysql # 数据库连接模块
import urllib.request # 网络访问模块 # 配置参数
maxcount = 1000 # 数据数量
home = 'http://baijia.baidu.com/' # 起始位置
# 数据库连接参数
db_config = {
'host': 'localhost',
'port': '',
'username': 'woider',
'password': '',
'database': 'python',
'charset': 'utf8'
} url_set = set() # url集合
url_old = set() # 过期url # 获取首页链接
html = urllib.request.urlopen(home).read().decode('utf8')
soup = bs4.BeautifulSoup(html, 'html.parser')
pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+'
links = soup.find_all('a', href=re.compile(pattern))
for link in links:
url_set.add(link['href']) # 文章类定义
class Article(object):
def __init__(self):
self.url = None
self.title = None
self.author = None
self.date = None
self.about = None
self.content = None # 连接数据库
connect = pymysql.Connect(
host=db_config['host'],
port=int(db_config['port']),
user=db_config['username'],
passwd=db_config['password'],
db=db_config['database'],
charset=db_config['charset']
)
cursor = connect.cursor() # 处理URL信息
count = 0
while len(url_set) != 0:
try:
# 获取链接
url = url_set.pop()
url_old.add(url) # 获取代码
html = urllib.request.urlopen(url).read().decode('utf8')
# DOM解析
soup = bs4.BeautifulSoup(html, 'html.parser')
pattern = 'http://\w+\.baijia\.baidu\.com/article/\w+' # 链接匹配规则
links = soup.find_all('a', href=re.compile(pattern)) # 获取URL
for link in links:
if link['href'] not in url_old:
url_set.add(link['href']) # 数据防重
sql = "SELECT id FROM news WHERE url = '%s' "
data = (url,)
cursor.execute(sql % data)
if cursor.rowcount != 0:
raise Exception('Data Repeat Exception: ' + url) # 获取信息
article = Article()
article.url = url # URL信息
page = soup.find('div', {'id': 'page'})
article.title = page.find('h1').get_text() # 标题信息
info = page.find('div', {'class': 'article-info'})
article.author = info.find('a', {'class': 'name'}).get_text() # 作者信息
article.date = info.find('span', {'class': 'time'}).get_text() # 日期信息
article.about = page.find('blockquote').get_text()
pnode = page.find('div', {'class': 'article-detail'}).find_all('p')
article.content = ''
for node in pnode: # 获取文章段落
article.content += node.get_text() + '\n' # 追加段落信息 # 存储数据
sql = "INSERT INTO news( url, title, author, date, about, content ) "
sql = sql + " VALUES ('%s', '%s', '%s', '%s', '%s', '%s') "
data = (article.url, article.title, article.author, article.date, article.about, article.content)
cursor.execute(sql % data)
connect.commit() except Exception as e:
print(e)
continue
else:
print(article.title)
count += 1
finally:
# 判断数据是否收集完成
if count == maxcount:
break # 关闭数据库连接
cursor.close()
connect.close()

=====================运行结果=====================

设置参数 maxcount = 10 , home = 'http://baijia.baidu.com/'

查询数据 SELECT title, author FROM python.news;

Python 网络爬虫(新闻采集脚本)的更多相关文章

  1. 利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

    相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20 ...

  2. 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取

    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌 ...

  3. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  4. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  5. 《精通python网络爬虫》笔记

    <精通python网络爬虫>韦玮 著 目录结构 第一章 什么是网络爬虫 第二章 爬虫技能概览 第三章 爬虫实现原理与实现技术 第四章 Urllib库与URLError异常处理 第五章 正则 ...

  6. Python 网络爬虫 001 (科普) 网络爬虫简介

    Python 网络爬虫 001 (科普) 网络爬虫简介 1. 网络爬虫是干什么的 我举几个生活中的例子: 例子一: 我平时会将 学到的知识 和 积累的经验 写成博客发送到CSDN博客网站上,那么对于我 ...

  7. 《实战Python网络爬虫》- 感想

    端午节假期过了,之前一直在做出行准备,后面旅游完又休息了一下,最近才恢复状态. 端午假期最后一天收到一个快递,回去打开,发现是微信抽奖中的一本书,黄永祥的<实战Python网络爬虫>. 去 ...

  8. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  9. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  10. Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

随机推荐

  1. 解读ASP.NET 5 & MVC6系列(17):MVC中的其他新特性

    (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtml平级,该文件的功能类 ...

  2. IE6读取不到样式文件bug

    早年的东东,贴出来充一下数吧~ 问题描述 在一个弹层优化需求中,完成了修改后,刷一下其他(除IE6外)浏览器,很给力,展现都一个样: 再刷下IE6,傻眼了: 初步分析 IE6问题多我知道,不过像这样的 ...

  3. [LeetCode] Guess Number Higher or Lower II 猜数字大小之二

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  4. MATLAB 成对T检验(paired-ttest)

    学过的统计知识忘光了,飞速恶补了一下能用到的,此篇多有错误今后看到再改= =||| 成对t检验(Paired ttest) 将两组测量值对应相减,再将所得差值看作服从正态分布的随机变量,然后再做关于差 ...

  5. 滑动验证的设计与实现J2EE

    滑动验证的设计与实现J2EE 注:本博文为博主原创,转载请注明出处. 项目源码地址:https://github.com/zhangxy1035/Verify 本篇博文的主要目录如下: 一.项目简介二 ...

  6. Ubuntu下运行Shell脚本

    将一个脚本保存为带有扩展名的文件,如test.sh, 在终端上输入: chmod +x test.sh 然后输入: test.sh 终端显示: test.sh 找不到命令(后来看了鸟个私房菜,发现这样 ...

  7. QQ,微信第三方登陆

    感觉越是大公司的SDK越不好用,其实我也是一直在想为什么他们拿那么高的工资却干着不相应的事儿. 下面说下QQ和微信第三方登陆的一点坑 首先 (QQ互联)自带的sdk中  一个文件工程没有调用产生关联错 ...

  8. 基于Dubbo框架构建分布式服务(三)

    我们将上面开发的服务提供方服务,部署到2个独立的节点上(192.168.14.1和10.10.4.125),然后可以通过Dubbo管理中心查看对应服务的状况,如图所示: 上图中可以看出,该服务有两个独 ...

  9. 使用charles V3.11.2 实现SSL抓包

    首先,确认开启了SSL选项: 然后到Help->SSL Proxying里查看帮助; 根据提示,将android手机连接到局域网的wifi上,然后将wifi连接的代理设置为192.168.21. ...

  10. Theano Inplace

    Theano Inplace inplace Computation computation that destroy their inputs as a side-effect. Example i ...