简书文章标题、链接的爬取

  @绳系想爬取公众号上的文章标题,可惜我不会。
  紧急恶补了一下爬取,试着写了一个小程序,可以爬取绳系的简书文章的标题和链接。记录一下过程。

1、分析页面结构

  可以发现需要爬取的

  • 文章在<li>这个标签下,
  • <a>标签为标题和链接,
  • <p>为文章摘要,
  • 下面还有作者名字、点赞数等等,

这里主要需要获取标题、摘要以及文章链接即可。

2、处理获取到的文本

  爬虫爬下来的是整个页面的xml文本,需要找到我们所需要的东西还得经过处理才行,这里选择用xpath来处理,我觉得还挺好用的。
xpath相关语法可以参照这个:

http://www.w3school.com.cn/xpath/xpath_syntax.asp
    先设置各个路径如下
#获取所有 li标签
xpath_items = '//ul[@class="note-list"]/li'
#对每个 li标签再提取
xpath_link = './div/a/@href'
xpath_title = './div/a[@class="title"]/text()'
xpath_abstract='./div/p/text()'

使用request的get方法获取页面,之后进行处理:

3、解决页面自动翻页问题

Ajax动态加载参考

(https://zhuanlan.zhihu.com/p/27346009)

  翻页时页面url不变,调用的request 增加了页码。
  此时需要打开Chrome的Network,这种技术的文档属于XHR文件,打开后可以看到一个新的request url,其中添加了order_by =added_at 和page=2,方法还是get方法。往下继续翻可以看到只是page在改变,这样的网站简直简单多了。
  那么可以设置一个循环来实现页面的增加。

4、Python代码

爬取绳系的简书文章的标题、摘要以及文章链接。结果存到excel表中。

序号链接标题摘要
1https://www.jianshu.com/p/2a3772293e2d这是绳系给你的能量甘为人梯,近我者富,每天给一个人提供价值。
2https://www.jianshu.com/p/6cc045b5d40c15周 每个人都需要能量你好,我是绳系。

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 12 11:36:28 2022

@author: dalong10
"""
import requests
from lxml import etree
import time
import socket
import xlwt
 
socket.setdefaulttimeout(20)
#请求头
headers1 = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cache-Control': 'max-age=0',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Proxy-Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36',
}
 

#获取所有 li标签
xpath_items = '//ul[@class="note-list"]/li'
#对每个 li标签再提取
xpath_link = './div/a/@href'
xpath_title = './div/a[@class="title"]/text()'
xpath_abstract='./div/p/text()'
 
a='added_at'
count=1


book = xlwt.Workbook() # 创建excel文件
sheet = book.add_sheet('sheet1') # 创建一个表
title = ['序号','链接', '标题', '摘要']
for col in range(len(title)): # 存入第一行标题
    sheet.write(0, col, title[col])
    
row=1    
#获取和解析网页
while count<43:
    #proxy = random.choice(proxy_list)
    #print(proxy)
    r1 = requests.get('https://www.jianshu.com/u/3e0a90a51887?order_by={}&page={}'.format(a,count), headers=headers1)
    print('https://www.jianshu.com/u/3e0a90a51887?order_by={}&page={}'.format(a,count))
    #r1.encoding = r1.apparent_encoding
    dom1 = etree.HTML(r1.text)
    print(r1.status_code)
 
#获取所有的文章标签
    items1 = dom1.xpath(xpath_items)
    for article in items1:
        t = {}
        t['link'] = 'https://www.jianshu.com'+article.xpath(xpath_link)[0]
        t['title'] = article.xpath(xpath_title)[0]
        t['abstract']=article.xpath(xpath_abstract)[0]
        sheet.write(row, 0, row)
        sheet.write(row, 1, t['link'])
        sheet.write(row, 2, t['title'])
        sheet.write(row, 3, t['abstract'])  
        row=row+1
        print(row)
        print(t)
        
#解析完毕
    count=count+1
    print(count)
    r1.close()
    time.sleep(5)
#存盘    
book.save('shengji.xls')

5、参考资料

1、「Cooooooooco」的博客https://blog.csdn.net/Cooooooooco/article/details/85237968

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值