项目介绍
最近整理了一些爬虫资料,现在将其整合做一个实战案例,顺便为女神的微博吸粉 :)
逻辑梳理
- 条件:女神微博地址 https://weibo.com/u/3035774121
- 需求:获取微博历史,将其保存为历史记录文件
本例重点抓取微博记录的发送时间、内容文本以及转发微博的原内容文本 - 思路(实现方案):
- 首先通过浏览器做页面访问,抓取到微博历史请求
控制台抓取到的请求地址为 https://weibo.com/p/aj/v6/mblog/mbloglist - 通过对请求的分析,找到变量x,控制其改变可以连续获取分页数据
经分析,有三个参数需要变动:
a. page/pre_page 当前请求的页数(range(0,max+1))
b. pagebar 请求当前页的第几部分(range(0,2))
c. __rnd 请求发起的时间戳(math.ceil(time.time() * 1000)) - 通过对响应的分析,整理解析方案
此请求返回值为json串,需先解析json获取其中的页面代码,然后正常解析网页 - 整理2/3步骤的操作,编码完成请求及解析操作
- 将结果保存至csv文件中,归档保存
- 首先通过浏览器做页面访问,抓取到微博历史请求
代码实现
import requests
from lxml import etree
import math
import time
import json
append_temp = '''
https://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain=100505&refer_flag=1005050005_&is_all=1&pagebar={1}&pl_name=Pl_Official_MyProfileFeed__21&id=1005053035774121&script_uri=/u/3035774121&feed_type=0&page={0}&pre_page={0}&domain_op=100505&__rnd={2}"
'''
headers = {
'Host': 'weibo.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
'Cookie': '', # 时效内容,需自行抓取
'Referer': 'https://weibo.com/u/3035774121?refer_flag=1005050005_&is_all=1'
}
wb_list = []
# 此处可以根据页面返回动态获取页数,这里从简
for page in range(0, 24):
for page_bar in range(0, 2):
now_time = math.ceil(time.time() * 1000)
url = append_temp.format(page, page_bar, str(now_time))
print(url)
req = requests.get(url, headers=headers).text
html = etree.HTML(json.loads(req)['data'])
div_list = html.xpath('/html/body/div')
for div in div_list:
wb_from = div.xpath('string(div/div[@class="WB_detail"]/div[@class="WB_from S_txt2"]/a/@title)')
wb_text = div.xpath('string(div/div[@class="WB_detail"]/div[@class="WB_text W_f14"])')
wb_quot = div.xpath(
'string(div/div[@class="WB_detail"]/div[@class="WB_feed_expand"]/div/div[@class="WB_text"])')
wb_dict = {
'from': wb_from,
'text': wb_text,
'quot': wb_quot
}
wb_list.append(wb_dict)
time.sleep(1)
import pandas
df = pandas.DataFrame(wb_list, columns=['from', 'text', 'quot'])
df.to_csv('wb_his.csv')