天天看点

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)

python 版本 : 3.7

简介 :

把 main_spider 中 user_id 和 cookie 改为自己的 id 和 cookie.

打开微博手机版 https://m.weibo.cn/

进入指定用户主页, 如李荣浩的主页 :

其中 1739046981 就是用户 id.

登录微博, 进入个人主页, 右键审查元素, 切换到 Network 栏, 勾选 perserve log.

在左边 name 栏找到 m.weibo.cn(或者其他能找到 cookie) 的 url, 从右边 response header 中找到 COOKIE 并复制粘贴到代码中.

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

main_spider.py 代码# _*_ coding: utf-8 _*_

importsys

importos

frombs4importBeautifulSoup# BeautifulSoup 为 python 爬虫库

importrequests# 网络请求库

importtime

fromlxmlimportetree# python 解析库, 支持 html,xml,XPath 解析

fromurllib.requestimporturlretrieve# 用于图片下载

# 改成自己的 user_id 和 cookie

user_id=YOUR_ID

cookie={"Cookie":"YOUR_COOKIE"}

# 初始 url

url='http://weibo.cn/%d/profile?page=1'%user_id

# 获取初始 url 页面 HTML 内容, 获取 user_id 和 cookie(在返回的 response header 中)

HTML=requests.get(url,cookies=cookie).content

print('user_id 和 cookie 读入成功')

# HTML 元素 selector

selector=etree.HTML(HTML)

# 通过 xpath 获取该用户微博页面总数

pageNum=int(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

result=""

word_count=1# 爬取的微博和图片数

image_count=1

imgsrc_list=[]# 图片链接列表

print('该用户微博页数 :',pageNum)

times=5

one_step=int(pageNum/times)

forstepinrange(times):

ifstep

i=int(step*one_step+1)

j=int((step+1)*one_step+1)

else:

i=int(step*one_step+1)

j=int(pageNum+1)

forpageinrange(i,j):

try:

# 目标页面 url

url='http://weibo.cn/%d/profile?page=%d'%(user_id,page)

print('正在爬取 url :',url)

# 获取当前 url 页面微博内容

lxml=requests.get(url,cookies=cookie).content

selector=etree.HTML(lxml)

# 获取该页面微博 list

content=selector.xpath('//span[@class="ctt"]')

# 遍历每条微博

foreachincontent:

# 获取文本内容, 加入 result, 记录条数

text=each.xpath('string(.)')

text="%d:"%(word_count)+text+"\n"

result=result+text

word_count+=1

print('第 %d 页微博内容爬取完完成'%(page))

# 把当前页面 lxml 实例化为 soup 对象

soup=BeautifulSoup(lxml,"lxml")

# 获取所有图片链接

urllist=soup.find_all(class_='ib')

# 遍历每个图片 url, 加入

forimgurlinurllist:

imgsrc=imgurl.get('src')

imgsrc_list.append(imgsrc)

image_count+=1

print('第 %d 页图片爬取完成, 获得如下图片:\n%s'%(page,imgsrc_list))

except:

print('第',page,'页发生错误')

time.sleep(0.001)# 爬取每页间隔时间

print('正在进行第',step+1,'次停顿, 防止访问次数过多')

time.sleep(1)

try:

# 打开文本存放文件, 如果不存在则新建

fo_txt=open(os.getcwd()+"/%d"%user_id+".txt","w")

result_path=os.getcwd()+'/%d'%user_id+".txt"

print('微博内容文本存放路径为 :',result_path)

fo_txt.write(result)# 将结果写入文件

print('爬取成功!\n 该用户微博内容:\n\n%s\n 文本存放路径为 %s'%(result,result_path))

except:

print('微博文本内容保存失败')

ifnotimgsrc_list:

print('该用户原创微博中不存在图片')

else:

# 图片存放文件夹路径

picdir=os.getcwd()+'/weibo_image'+str(user_id)

print(picdir)

ifos.path.exists(picdir)isFalse:

os.mkdir(picdir)# 若不存在则新建

img_index=1

# 遍历图片

forimgurlinimgsrc_list:

# 图片本地存放路径

img_path=picdir+'/%s.jpg'%img_index

print('正在保存',img_path)

# 将图片下载到本地

urlretrieve(imgurl,img_path)

img_index+=1

print('该用户微博图片下载完成! 共有 %d 张图片, 存放文件夹为 %s'%(img_index,picdir))

运行截图 :

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

爬取的微博内容文件会被放到工程目录下用户对应的 txt 文件 (自动生成).

图片放到对应 weibo_image 文件下.

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

python爬虫源码附注解_[python 爬虫] BeautifulSoup 爬取指定用户原创微博及图片 (代码 + 注释)...

image.PNG

来源: http://www.jianshu.com/p/f65829b22b91