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

分享
手机游戏开发者 2024-9-20 06:50:35 33 0 来自 中国
  @绳系想爬取公众号上的文章标题,可惜我不会。
  告急恶补了一下爬取,试着写了一个小步伐,可以爬取绳系的简书文章的标题和链接。记录一下过程。
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 requestsfrom lxml import etreeimport timeimport socketimport 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=1book = 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
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 23:57, Processed in 0.170527 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表