小言_互联网的博客

微博爬虫,python微博用户主页小姐姐图片内容采集爬虫

413人阅读  评论(0)

python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的!

要抓取的微博地址:https://weibo.com/u/5118612601

BUT,我们实际应用的抓取地址:https://m.weibo.cn/u/5118612601(移动端的微博地址)

LSP的最爱,各种小姐姐,随你任意爬取,快收藏起来啊!

通过浏览器抓包,我们可以获悉几个比较重要的参数:


   
  1. type: uid
  2. value:  5118612601
  3. containerid:  1005055118612601

其实还有一个比较重要的参数,那就是翻页:'page':page!

还有一个SSL错误问题,大家可以自行处理!


   
  1. import logging
  2. logging.captureWarnings(True)
  3. # 屏蔽warning信息
  4. requests.packages.urllib3.disable_warnings()
  5. html=requests.get(self.url,headers=self.headers,params=params,timeout= 5,verify=False).content.decode( 'utf-8')

几个关键点

  • 获取 containerid 参数


   
  1.     def get_containerid(self):
  2.         url = f 'https://m.weibo.cn/api/container/getIndex?type=uid&value={self.uid}'
  3.         data = requests.get(url,headers=self.headers,timeout= 5,verify=False).content.decode( 'utf-8')
  4.         content = json.loads(data).get( 'data')
  5.          for data in content.get( 'tabsInfo').get( 'tabs'):
  6.              if (data.get( 'tab_type') ==  'weibo'):
  7.                 containerid = data.get( 'containerid')
  8.         self.containerid=containerid
  • 获取 微博用户发表 数据


   
  1.     def get_content(self,i):
  2.         params={
  3.              'type''uid',
  4.              'value': self.uid,
  5.              'containerid': self.containerid,
  6.              'page':i,
  7.         }
  8.         html=requests.get(self.url,headers=self.headers,params=params,timeout= 5,verify=False).content.decode( 'utf-8')
  9.         data=json.loads(html)[ 'data']
  10.         cards=data[ 'cards']
  11.         # print(cards)
  12.         j =  1
  13.          for card in cards:
  14.              if  "mblog" in str(card):
  15.                 mblog = card[ 'mblog']
  16.                 raw_text = mblog[ 'raw_text']  # 文本内容
  17.                  print(raw_text)
  18.                 scheme=card[ 'scheme'] #微博链接
  19.                 attitudes_count = mblog.get( 'attitudes_count') #点赞数
  20.                 comments_count = mblog.get( 'comments_count') #评论数
  21.                 created_at = mblog.get( 'created_at') #发布时间
  22.                 reposts_count = mblog.get( 'reposts_count') #转发数
  23.                  print(scheme)
  24.                 img_path=f '{self.path}{i}/{j}'
  25.                 os.makedirs(f '{img_path}/',exist_ok=True)
  26.                 with open(f '{img_path}/{j}.txt''a', encoding= 'utf-8') as f:
  27.                     f.write(f '{raw_text}')
  28.                 img_urls=[]
  29.                  if mblog.get( 'pics') != None:
  30.                     img_datas=mblog[ 'pics']
  31.                      for img_data in img_datas:
  32.                         img_url=img_data[ 'large'][ 'url']
  33.                         img_urls. append(img_url)
  34.                      print(img_urls)
  35.                     #多线程下载图片
  36.                     self.get_imgs(img_urls,img_path)
  37.                     #多进程下载图片
  38.                     #self.get_pimgs(img_urls)
  39.                 with open(f '{self.uid}/{self.uid}.txt''a', encoding= 'utf-8') as fh:
  40.                     fh.write( "----第" + str(i) +  "页,第" + str(j) +  "条微博----" +  "\n")
  41.                     fh.write(f "微博地址: {str(scheme)}\n微博内容:{raw_text}\n"
  42.                              f "发布时间:{str(created_at)}\n转发数:{str(reposts_count)}\n"
  43.                              f "点赞数:{str(attitudes_count)}\n评论数:{str(comments_count)}\n\n")
  44.                 j=j+ 1
  45.                 time.sleep( 2)
  • 多线程下载图片


   
  1.     #多线程下载图片
  2.     def get_imgs(self,img_urls,img_path):
  3.         threadings = []
  4.          for img_url in img_urls:
  5.             t = threading.Thread(target=self.get_img, args=(img_url,img_path))
  6.             threadings. append(t)
  7.             t.start()
  8.          for x in threadings:
  9.             x.join()
  10.          print( "多线程下载图片完成")
  11.     def get_img(self, img_url,img_path):
  12.         img_name = img_url.split( '/')[ -1]
  13.          print(f '>> 正在下载图片:{img_name} ..')
  14.         r = requests.get(img_url, timeout= 8, headers=self.headers,verify=False)
  15.         with open(f '{img_path}/{img_name}''wb') as f:
  16.             f.write(r.content)
  17.          print(f '>> 图片:{img_name} 下载完成!')

本来还想搞个多进程,结果翻车了,报错各种头秃,那就不搞了!!

手里头有二份微博爬虫的源码,不同的爬取地址和思路,一起分享给大家,仅供参考学习!

一份还包含GUI界面,当然这是本渣渣参考的主要来源代码!

亲测可运行哈!!

关注本渣渣微信公众号:二爷记

后台回复关键字:“微博爬虫”

获取所有源码


转载:https://blog.csdn.net/minge89/article/details/110102826
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场