1、爬与目标
各人佳,尔是马哥。
来日诰日分享一期python爬虫案例,爬与目标是新浪微专的微专数据,包罗:
页码, 微专id, 微专bid, 微专作家, 公布时间, 微专实质, 转收数, 批评数, 面赞数
颠末阐发调研,发明微专有3种会见方法,别离是:
- PC端网页:https://weibo.com/
- 挪动端:https://weibo.cn/
- 脚机端:https://m.weibo.cn/
终极决定,颠末脚机端爬与。
那里,给各人分享一个爬虫小本领。当目标网站既存留PC网页端,又有脚机挪动端,倡议爬与挪动端,启事是:挪动端一般网页构造简朴,而且反爬才气较强,更便利爬虫爬与。
2、展示爬与成果
尔颠末爬虫代码,爬与了“唐山挨人”那个枢纽字下的前80页微专,部门数据以下:
爬与成果
一同635条数据,同80页,好未几每一页没有到10条的数据。
3、解说代码
起首,导进需要用到的库:
import os
import re # 邪则表示式提炼文原
from jsonpath import jsonpath # 剖析json数据
import requests # 收收恳求
import pandas as pd # 存与csv文献
import datetime # 而后,界说一个变换时间字符串的函数,因为爬与到的时间戳是GMT格局(类似这类:Fri Jun 17 22:21:48 +0800 2022)的,需要变换成尺度格局:
def trans_time(v_str):
"""变换GMT时间为尺度格局"""
GMT_FORMAT = '%a %b %d %H:%M:%S +0800 %Y'
timeArray = datetime.datetime.strptime(v_str, GMT_FORMAT)
ret_time = timeArray.strftime("%Y-%m-%d %H:%M:%S")
return ret_time界说一个恳求头,前面收收恳求的时候戴上它,避免反爬:
# 恳求头
headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Mobile Safari/537.36",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
}翻开chrome浏览器,按F12加入开辟者情势,根据下图操纵,阐发出目标恳求地点:
开辟者情势
按照阐发成果,编辑恳求代码:
# 恳求地点
url = 'https://m.weibo.cn/api/container/getIndex'
# 恳求参数
params = {
"containerid": "100103type=1&q={}".format(v_keyword),
"page_type": "searchall",
"page": page
}
# 收收恳求
r = requests.get(url, headers=headers, params=params)间接用json格局,领受前去的数据:
# 剖析json数据
cards = r.json()["data"]["cards"]上面,颠末jsonpath,快速剖析出各个字段数据。
科普常识:jsonpath是一种快速剖析json数据的办法,语法例则有面像xpath,那里便没有睁开道了,
具体介绍,请睹:
JsonPath完整介绍及具体使用学程_Sunny菜蔬小柠的专客-CSDN专客_jsonpath 上面展示部门字段剖析历程:
# 转收数
reposts_count_list = jsonpath(cards, '$..mblog.reposts_count')
# 批评数
co妹妹ents_count_list = jsonpath(cards, '$..mblog.co妹妹ents_count')
# 面赞数
attitudes_count_list = jsonpath(cards, '$..mblog.attitudes_count')把统统的字段的list数据,拼拆成DataFrame格局数据:
# 把列表数据保留成DataFrame数据
df = pd.DataFrame(
{
'页码': |