使用Python和BeautifulSoup爬取历史上的今天网站并将描述及网址存储到csv文件中
来源:互联网 发布:阿里云域名备案多少钱 编辑:程序博客网 时间:2024/05/21 08:36
Python版本:python3.6.0 | Anocanda 4.3.1 (64-bit)
BeautifulSoup版本:4.0.0.1
使用的python库:csv,bs4, os, urllib.request
爬取网站:历史上的今天(http://www.lssdjt.com/2/29/)
简述:历史上的今天网站,网页源码比较规整,便于进行爬取,将爬虫的基本知识融合在一起进行使用,作为自己python学习之路的小小记录。
备注:在进行代码爬取的过程中,需要有个初始化的日期,初始化日期如上所示,之所以选择2月29号,是因为,爬取的年份不是闰年,不从2月29号开始,会漏掉2月29号这一天。
爬取的结果(共一万多条数据):
1、导入所需要的python库
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport csvimport os
urlopen:用于打开网页
BeautifulSoup:在进行网页中元素查找时,有了BeautifulSoup这种将页面结构化的工具,会方便很多
csv:用于将数据写入csv文件
os:用于获取文件的路径
2、初始化将要进行写入的csv文件:
# 初始化写入文件csvFile = open(os.getcwd() + "/files/history.csv", 'w+', newline='')writer = csv.writer(csvFile)writer.writerow(('discription', 'url'))3、分析待爬取的网页,对网页进行爬取:
网页显示如图所示:
在网页上点击右键(本例使用的是Chrome浏览器),在弹出的菜单中选择检查。(或者按Ctrl + Shift + I)
如图所示:
通过对网页的分析可知,我们需要的内容及内容对应的网址,在"class"为"main"的<div>元素中,<div>元素下有个<ul>元素,类为"clear fix"
我们需要后一天的日期来进行下一步的爬取,在页面中有后一天的位置,再次对后一天按钮进行检查,可以得到:
使用BeautifulSoup中的find及findAll函数,可以得到历史上的今天内容及内容相对应的网址,同时返回下一步要进行爬取的链接地址:
def WriteItems(url):html = urlopen(url)bsObj = BeautifulSoup(html, 'lxml')nextUrlClass = bsObj.find('ul', {'class': 'bot'}).find('li', {'class': 'r'})next_url = nextUrlClass.a['href']print(next_url)page_items = bsObj.find('div', {'class': 'main'}).find('ul', {'class': 'list clearfix'})items = page_items.findAll('li', {'class': 'gong'})return next_url, items
4、爬取完成后,将items写入到csv文件中:
def WriteToCSV(items, date):# dateSplit = date.split('/')# dateDir = dateSplit[0] + ' ' + dateSplit[1]# os.mkdir(os.getcwd() + "/files/images/" + dateDir)writer = csv.writer(csvFile, delimiter=' ')writer.writerow(date)writer = csv.writer(csvFile)for item in items:# try:# imgUrl = item.a["rel"]# imgName = item.a['title']# urlretrieve(imgUrl[0], os.getcwd() + "/files/images/" + dateDir + '/' + imgName + ".jpg")# print(imgUrl[0])# except:# passtry:writer.writerow((item.a['title'], item.a['href']))except:pass(注:注释部分表示的是对存在的图片进行爬取,因为图片爬取不顺畅,故将其注释,但程序可跑,将图片爬取完毕后,可以做一个展示网站,当然这是自己的设想啦……)
使用try和except,以使程序能够在遇到错误时,不会挂掉
5、因为一年最多是有366天,所以用for循环进行爬取,爬取写入完毕后,将csv文件关闭:
for _ in range(366):startUrlSplit = startUrl.split('/')startUrl, items = WriteItems(startUrl)date = startUrlSplit[-2] + '/' + startUrlSplit[-1]WriteToCSV(items, date)csvFile.close()所有可执行代码下载链接:http://download.csdn.net/download/zhangwellyear/10003634
- 使用Python和BeautifulSoup爬取历史上的今天网站并将描述及网址存储到csv文件中
- python 结巴分词中 按行读取 csv中的文件 并将分词存储到csv中
- [python爬虫] BeautifulSoup爬取+CSV存储贵州农产品数据
- 使用Python3和BeautifulSoup爬取笑话网站内容,并导入Excel
- python爬取大众点评网商家信息以及评价,并将数据存储到excel表中(源码及注释)
- 利用Python爬取妙笔阁小说网站的小说信息并保存为txt和csv格式
- 爬取猫眼top100电影并存储在本地csv文件中
- Python运用urllib2和BeautifulSoup爬取网站ZOL桌面壁纸上的精美电脑壁纸
- 使用Scrapy爬取笑话并存储到文件和MySQL
- 读取CSV文件并存储到ArrayList中
- 使用BeautifulSoup爬取“0dayin”网站的资源
- 将上传的文件描述保存到数据库中,并显示到页面
- [python爬虫] 招聘信息定时系统 (一).BeautifulSoup爬取信息并存储MySQL
- 使用python将csv数据导入到sqlite中
- java将float数据写入csv 并在python中读取csv文件
- #python学习笔记#使用python爬取网站数据并保存到数据库
- 爬取实习僧网站并存储到MongoDB
- Python将一个CSV文件里的数据追加到另一个CSV文件
- hihocoder-1116 : 计算 (线段树区间合并)
- Spring 中的 classpath*: 与 classpath: 通配符
- 五个DevOps原则应用于企业架构
- Android 6.0动态权限及小米(MIUI)权限的特殊处理
- 深圳开发无人超市系统招商加盟的条件
- 使用Python和BeautifulSoup爬取历史上的今天网站并将描述及网址存储到csv文件中
- Qt-解锁QtPropertyBrowser控件
- 浅谈dom事件
- Integer与int的种种比较你知道多少?
- Android 使用okhttp3 post 上传图片
- 暗黑破坏神(DIABLOII 1.11B)BOT下载
- 项目管理——进度
- 应用缓存初级使用指南
- ANDREW Ng教授的机器学习(Machine Learning)学习笔记(1)– 认识机器学习