python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的!
要抓取的微博地址:https://weibo.com/u/5118612601
BUT,我们实际应用的抓取地址:https://m.weibo.cn/u/5118612601(移动端的微博地址)
LSP的最爱,各种小姐姐,随你任意爬取,快收藏起来啊!
通过浏览器抓包,我们可以获悉几个比较重要的参数:
-
type: uid
-
value:
5118612601
-
containerid:
1005055118612601
其实还有一个比较重要的参数,那就是翻页:'page':page!
还有一个SSL错误问题,大家可以自行处理!
-
import logging
-
logging.captureWarnings(True)
-
-
# 屏蔽warning信息
-
requests.packages.urllib3.disable_warnings()
-
-
html=requests.get(self.url,headers=self.headers,params=params,timeout=
5,verify=False).content.decode(
'utf-8')
-
几个关键点
获取 containerid 参数
-
def get_containerid(self):
-
url = f
'https://m.weibo.cn/api/container/getIndex?type=uid&value={self.uid}'
-
data = requests.get(url,headers=self.headers,timeout=
5,verify=False).content.decode(
'utf-8')
-
content = json.loads(data).get(
'data')
-
for data in content.get(
'tabsInfo').get(
'tabs'):
-
if (data.get(
'tab_type') ==
'weibo'):
-
containerid = data.get(
'containerid')
-
-
self.containerid=containerid
获取 微博用户发表 数据
-
def get_content(self,i):
-
params={
-
'type':
'uid',
-
'value': self.uid,
-
'containerid': self.containerid,
-
'page':i,
-
}
-
html=requests.get(self.url,headers=self.headers,params=params,timeout=
5,verify=False).content.decode(
'utf-8')
-
data=json.loads(html)[
'data']
-
cards=data[
'cards']
-
#
print(cards)
-
j =
1
-
for card in cards:
-
if
"mblog" in str(card):
-
mblog = card[
'mblog']
-
raw_text = mblog[
'raw_text'] # 文本内容
-
print(raw_text)
-
scheme=card[
'scheme'] #微博链接
-
attitudes_count = mblog.get(
'attitudes_count') #点赞数
-
comments_count = mblog.get(
'comments_count') #评论数
-
created_at = mblog.get(
'created_at') #发布时间
-
reposts_count = mblog.get(
'reposts_count') #转发数
-
print(scheme)
-
img_path=f
'{self.path}{i}/{j}'
-
os.makedirs(f
'{img_path}/',exist_ok=True)
-
with open(f
'{img_path}/{j}.txt',
'a', encoding=
'utf-8') as f:
-
f.write(f
'{raw_text}')
-
-
img_urls=[]
-
if mblog.get(
'pics') != None:
-
img_datas=mblog[
'pics']
-
for img_data in img_datas:
-
img_url=img_data[
'large'][
'url']
-
img_urls.
append(img_url)
-
print(img_urls)
-
-
#多线程下载图片
-
self.get_imgs(img_urls,img_path)
-
-
#多进程下载图片
-
#self.get_pimgs(img_urls)
-
-
with open(f
'{self.uid}/{self.uid}.txt',
'a', encoding=
'utf-8') as fh:
-
fh.write(
"----第" + str(i) +
"页,第" + str(j) +
"条微博----" +
"\n")
-
fh.write(f
"微博地址: {str(scheme)}\n微博内容:{raw_text}\n"
-
f
"发布时间:{str(created_at)}\n转发数:{str(reposts_count)}\n"
-
f
"点赞数:{str(attitudes_count)}\n评论数:{str(comments_count)}\n\n")
-
j=j+
1
-
-
time.sleep(
2)
-
多线程下载图片
-
#多线程下载图片
-
def get_imgs(self,img_urls,img_path):
-
threadings = []
-
for img_url in img_urls:
-
t = threading.Thread(target=self.get_img, args=(img_url,img_path))
-
threadings.
append(t)
-
t.start()
-
-
for x in threadings:
-
x.join()
-
-
print(
"多线程下载图片完成")
-
-
-
def get_img(self, img_url,img_path):
-
img_name = img_url.split(
'/')[
-1]
-
print(f
'>> 正在下载图片:{img_name} ..')
-
r = requests.get(img_url, timeout=
8, headers=self.headers,verify=False)
-
with open(f
'{img_path}/{img_name}',
'wb') as f:
-
f.write(r.content)
-
print(f
'>> 图片:{img_name} 下载完成!')
-
本来还想搞个多进程,结果翻车了,报错各种头秃,那就不搞了!!
手里头有二份微博爬虫的源码,不同的爬取地址和思路,一起分享给大家,仅供参考学习!
一份还包含GUI界面,当然这是本渣渣参考的主要来源代码!
亲测可运行哈!!
关注本渣渣微信公众号:二爷记
后台回复关键字:“微博爬虫”
获取所有源码
转载:https://blog.csdn.net/minge89/article/details/110102826
查看评论