@绳系想爬取公众号上的文章标题,可惜我不会。
告急恶补了一下爬取,试着写了一个小步伐,可以爬取绳系的简书文章的标题和链接。记录一下过程。
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 |