用python(Requests库)爬取数据局行业报告的信息

作为一个刚入门对python极具喜爱的小白,坚信实践才是掌握工具的唯一道路,所以一直想要用python来做一些项目来辅助提高工作、生活中的处理一些事情的效率。

在平时的工作中,总是难免会需要搜集各种各样的行业研究报告,单纯从搜索引擎中搜寻下载又是一个耗费时间和体力的事情。后来发现一个神奇良心的网站——数据局(http://shujuju.cn),里面时常更新一些报告解决燃眉之急。

这么一个大宝藏,我决定将其报告名称及链接爬取下来,因为下载需要涉及到登陆,而登陆遇到了比较棘手的图片验证的问题,后期将会针对报告本身的进行一些分析(下期见~)

其实整体思路是相当的简单, 因为网站本身就没有太多复杂的地方,思路如下:

  1. 用requests库爬取报告列表页第一页,并通过lxml的etree进行页面分析获取到整体的页数
  2. 因为翻页逻辑只是在 "http://www.shujuju.cn/lecture/detail/"后加上页码数字,故利用规律构建所有需要爬取的网页链接
  3. 然后继续使用requests和xlml将所有列表页中报告名称和报告所在的页面链接给保留下来
  4. 然后逐一去爬取报告详情页,文末附录的报告链接给抓取保存
  5. 最后用csv将所有数据保存在本地

完整代码如下:

#-*- coding: utf-8 -*
import requests
import re
import time
import csv
from lxml import etree

#构建header
headers = {
    "Accept": "application/json",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}

#获得目前最新的报告的编号
url = "http://www.shujuju.cn/lecture/browe"
response = requests.get(url,headers = headers)
datas = etree.HTML(response.text)
print(datas.text)
results = datas.xpath('//div[@class="textdescription-small-info"]/h3/a/@href')
last_report_num = re.search('\d{4}',results[0])
last_report_num = last_report_num[0]

#构建报告的列表
report_page_urls = []
for report_num in range(int(last_report_num)):
    report_page_url = "http://www.shujuju.cn/lecture/detail/"+str(report_num+1)
    report_page_urls.append(report_page_url)

###获取报告页内容

report_info = []

for i in range(int(last_report_num)):
    target_url=report_page_urls[i]
    response = requests.get(target_url,headers = headers)
    page_datas = etree.HTML(response.text)
    #获取标题
    title = page_datas.xpath('//h1[@class="title"]/text()')
    title = title[0]

    #获取下载链接
    report_download_ul = page_datas.xpath('//div[@class="report-article"]/ul/li/a/@href')
    try:
        report_download_ul=report_download_ul[0]
        report_download_ul = "http://www.shujuju.cn"+report_download_ul
    except IndexError:
        print(title + " 报告页面没有附下载链接")
        report_download_ul = ''
    new_report_info = { 'report_title':title,'download_url':report_download_ul,'paga_url':target_url}
    report_info.append(new_report_info)
    print("已处理第"+str(i+1)+'个页面,共'+last_report_num+'个页面')
    time.sleep(1)

# 保存数据到csv文件中
with open('E:/report/report.csv','w') as csvfile:
    fieldnames = report_info[1].keys()
    f_csv = csv.DictWriter(csvfile,fieldnames = fieldnames)
    f_csv.writeheader()
    for data in report_info:
        try:
            f_csv.writerow(data)
        except UnicodeEncodeError:
            print('第'+str(data)+'个报告的标题存在特殊字符,保存失败')
    print("保存文件成功,处理结束")


因为中途有两个问题,一个是网页中可能介绍了报告却没有附上报告链接,这种情况下报告名称和网页链接保留下来了,是没有下载链接;另一个问题是由于报告标题中存在一些特殊字符,这些字符没法写入到CSV中,故暂时先没有记录;

最后的保存下来的结果如下:

报告保存结果列表.png

接下来需要对这些保存下来的资产进行分析利用,目前正在思考尝试中,如果觉得有有意思的地方,下次将会继续分享~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容