《python爬虫学习》之爬取csdn网站的python模块发布文章的数据

前言:

最近开始学习python开发,python爬虫早就在一年前就有接触过,不过很少用,害怕自己会忘记,所以在学习python开发的时间里,也会写一些爬虫相关的文章,记录一下自己的学习历程。

 

虽然是温故以前的知识,不过如果跟以前一样先学爬豆瓣、虎扑这些爬虫常客,感觉没什么意义,所以另辟新路,爬取csdn,不过这里从简单的来,先爬取一些网站接口就返回出来的数据。

写爬虫的第一步,先分析欲爬取的网站:

步骤1:进入开发者模式

进入csdn网站,进入开发者模式,点击XHR将无关文件pass掉,再慢慢寻找包含自己需要的数据的文件(如果进入F12没有加载文件,可按F5刷新一下网站,网站包含文件会重新加载)

步骤2:分析数据文件

分析返回的json数据,提取我们需要的东西

这里我准备爬取的数据为 title (标题)、nickname(作者)和 url (文章地址)。

因为爬取的目标只是一个简单的接口,数据也并非什么重点保护的对象,所以很容易就能提取到我们要的东西。

步骤3:写爬虫

分析完网站后,就可以开始写爬虫代码。

from urllib import request
req=request.Request('https://www.csdn.net/api/articles?type=new&category=python')
response=request.urlopen(req).read()
print(response)

 

这里因为是温故旧的知识,所以保留写一段内容便打印一次结果,看输出的内容。通过打印的内容,会发现数据中的中文都变成\\u4ece这种类似乱码的东西,其实不然,这里只是字符串的编码问题,只要将它转换成json就会发现内容又变回中文。

from urllib import request
import json
req=request.Request('https://www.csdn.net/api/articles?type=new&category=python')
response=request.urlopen(req).read()
response_json = json.loads(response)
print(response_json)

步骤4:精炼数据

经过上面简单的python代码,我们就获得了富含内容的json字符串,但里面有许多是我们不需要的数据,所以需要把我们需要的数据提取出来。

from urllib import request
import json
req=request.Request('https://www.csdn.net/api/articles?type=new&category=python')
response=request.urlopen(req).read().decode('utf-8')
response_json = json.loads(response)['articles']
# print(response_json)
for res in response_json:
    print('标题:%s \t 作者: %s \t 地址: %s '%(res['title'],res['nickname'],res['url']))

步骤5:写入excel表格

通过xlwt模块,可以将爬取的数据写入excel表格中

from urllib import request
import json
import xlwt
req=request.Request('https://www.csdn.net/api/articles?type=new&category=python')
response=request.urlopen(req).read().decode('utf-8')
response_json = json.loads(response)['articles']
workbook=xlwt.Workbook()
sheet1=workbook.add_sheet('csdn')
sheet1.write(0,0,'标题')
sheet1.write(0,1,'作者')
sheet1.write(0,2,'地址')
i=0
for res in response_json:
    i+=1
    sheet1.write(i, 0, res['title'])
    sheet1.write(i, 1, res['nickname'])
    sheet1.write(i, 2, res['url'])
    print(res['title'],i)
workbook.save('csdn.xls')

 

步骤6:重构

完成上面步骤,我们就获得了我们需要爬取的数据,基本就可以收工了。不过为了代码的简洁性,即使代码量不多,我还是将重新整理了一下

from urllib import request
import json
import xlwt
import ssl

#添加user-agent用户代理
ua_list=['Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6726.400 QQBrowser/10.2.2265.400',
         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11'
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
         'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.3.4000 Chrome/30.0.1599.101 Safari/537.36',
         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'
         ]

# 爬取网站数据数据并转换为json字符串
def readURL(url):
    # 随机获取一个代理
    user_agent = random.choice(ua_list)
    # 拼接代理头
    headers = {'User-Agent': user_agent}
    context = ssl._create_unverified_context()
    req = request.Request(url,headers=headers)
    response = request.urlopen(req,context=context).read().decode('utf-8')
    response_json = json.loads(response)['articles']
    return response_json

# 将数据写入excel表格
def writeXLS(json):
    workbook = xlwt.Workbook()
    sheet1 = workbook.add_sheet('csdn')
    sheet1.write(0, 0, '标题')
    sheet1.write(0, 1, '作者')
    sheet1.write(0, 2, '地址')
    i = 0
    for res in json:
        i += 1
        sheet1.write(i, 0, res['title'])
        sheet1.write(i, 1, res['nickname'])
        sheet1.write(i, 2, res['url'])
    workbook.save('csdn.xls')

if __name__ == '__main__':
    url='https://www.csdn.net/api/articles?type=more&category=python'
    json=readURL(url)
    writeXLS(json)

 

我们可以通过改变url中的category来变更我们要爬取的网站模块内容,比如category=python 替换成 category=Java

 

当然,我们通过直接爬取网站服务器返回给用户的json数据,会发现爬到的数据只有10条,而且每次爬取数据都不同,大概是因为该接口是默认返回指定数量的数据,而不是全部。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值