??@繩系想爬取公眾號上的文章標(biāo)題早歇,可惜我不會。
??緊急惡補(bǔ)了一下爬取讨勤,試著寫了一個小程序箭跳,可以爬取繩系的簡書文章的標(biāo)題和鏈接。記錄一下過程潭千。
1谱姓、分析頁面結(jié)構(gòu)
??可以發(fā)現(xiàn)需要爬取的
- 文章在<li>這個標(biāo)簽下,
- <a>標(biāo)簽為標(biāo)題和鏈接刨晴,
- <p>為文章摘要屉来,
- 下面還有作者名字、點(diǎn)贊數(shù)等等割捅,
這里主要需要獲取標(biāo)題奶躯、摘要以及文章鏈接即可。
2亿驾、處理獲取到的文本
??爬蟲爬下來的是整個頁面的xml文本嘹黔,需要找到我們所需要的東西還得經(jīng)過處理才行,這里選擇用xpath來處理,我覺得還挺好用的儡蔓。
xpath相關(guān)語法可以參照這個:
http://www.w3school.com.cn/xpath/xpath_syntax.asp
先設(shè)置各個路徑如下
#獲取所有 li標(biāo)簽
xpath_items = '//ul[@class="note-list"]/li'
#對每個 li標(biāo)簽再提取
xpath_link = './div/a/@href'
xpath_title = './div/a[@class="title"]/text()'
xpath_abstract='./div/p/text()'
使用request的get方法獲取頁面郭蕉,之后進(jìn)行處理:
3、解決頁面自動翻頁問題
Ajax動態(tài)加載參考
(https://zhuanlan.zhihu.com/p/27346009)
??翻頁時頁面url不變喂江,調(diào)用的request 增加了頁碼召锈。
??此時需要打開Chrome的Network,這種技術(shù)的文檔屬于XHR文件获询,打開后可以看到一個新的request url涨岁,其中添加了order_by =added_at 和page=2,方法還是get方法吉嚣。往下繼續(xù)翻可以看到只是page在改變梢薪,這樣的網(wǎng)站簡直簡單多了。
??那么可以設(shè)置一個循環(huán)來實(shí)現(xiàn)頁面的增加尝哆。
4秉撇、Python代碼
爬取繩系的簡書文章的標(biāo)題、摘要以及文章鏈接秋泄。結(jié)果存到excel表中琐馆。
序號 | 鏈接 | 標(biāo)題 | 摘要 |
---|---|---|---|
1 | http://www.reibang.com/p/2a3772293e2d | 這是繩系給你的能量 | 甘為人梯,近我者富恒序,每天給一個人提供價值瘦麸。 |
2 | http://www.reibang.com/p/6cc045b5d40c | 15周 每個人都需要能量 | 你好,我是繩系奸焙。 |
# -*- 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標(biāo)簽
xpath_items = '//ul[@class="note-list"]/li'
#對每個 li標(biāo)簽再提取
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() # 創(chuàng)建excel文件
sheet = book.add_sheet('sheet1') # 創(chuàng)建一個表
title = ['序號','鏈接', '標(biāo)題', '摘要']
for col in range(len(title)): # 存入第一行標(biāo)題
sheet.write(0, col, title[col])
row=1
#獲取和解析網(wǎng)頁
while count<43:
#proxy = random.choice(proxy_list)
#print(proxy)
r1 = requests.get('http://www.reibang.com/u/3e0a90a51887?order_by={}&page={}'.format(a,count), headers=headers1)
print('http://www.reibang.com/u/3e0a90a51887?order_by={}&page={}'.format(a,count))
#r1.encoding = r1.apparent_encoding
dom1 = etree.HTML(r1.text)
print(r1.status_code)
#獲取所有的文章標(biāo)簽
items1 = dom1.xpath(xpath_items)
for article in items1:
t = {}
t['link'] = 'http://www.reibang.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