注释给了一些要点
用requests库爬取时网页可能加载不完整,故用selenium库,加sleep延时使加载充分
主要利用re库,利用正则表达式提取html文件中的信息
threading是多线程运行,节省时间
如何使用?
配置selenium库,下载chomedriver,网上有教程
更改range函数的范围就可以对该范围内用户信息爬取
存在问题:
太慢
不稳定,会漏用户,测试中
用正则表达式麻烦
改进:
学习xpath、scrapy爬虫框架、线程池等
from selenium import webdriver
import re
import time
import threading
def blbl_uid_get(uid):
url="https://space.bilibili.com/"+str(uid)
# 不开网页显示
option = webdriver.ChromeOptions()
option.add_argument("headless")
# 使用selenium模块得到网页完整源码
driver=webdriver.Chrome(chrome_options=option)
driver.get(url)
respond=driver.page_source
time.sleep(8)
# 网页内容爬取测试
# with open("blbl.html","wb+") as f:
# f.write(respond.encode())
up_name=re.findall(r'<span id="h-name">\s*(.*?)\s*</span>',respond,re.S)
up_fans=re.findall(r'<p id="n-fs" class="n-data-v space-fans">\s*(.*?)\s*</p>',respond,re.S)
# 网页还是缺失了部分信息如下
# zan_num=re.findall(r'视频、动态、专栏累计获赞([^"]*)',respond,re.S)
# watch_num=re.findall(r'截止昨天,播放数总计为([^"]*)',respond,re.S)
# read_num=re.findall(r'截止昨天,阅读数总计为([^"]*)',respond,re.S)
if len(up_fans)!=0 and len(up_name)!=0:
# 摘取要寻找的信息
record=""
record=up_name[0]+" "+up_fans[0]+'\n'# +" "+zan_num[0]+" "+watch_num[0]+" "+read_num[0]
# 写入文件
with open("up_fans.txt","a+") as f:
f.write(record)
f.close()
# 一定要quit
driver.quit()
# 并发执行爬虫
for i in range(348651384,348651400):
t = threading.Thread(target=blbl_uid_get, args=(i,))
t.start()
结果:
70975784467_bili 0
chnksxf 0
深蓝色五角枫 8
-SWQ- 27
w773727 0
If-There-If 2
bili75588510448 0
u723510 1
o206413 0
10292619012_bili 1
丶帝丶弑 0
t252791 0
why13643485777 0
丁嘉丽12334 0
80204814302_bili 0
ddzn17ZXZ 1
结论:显然,-SWQ-在一定范围内粉丝最多
2023年3月20日21:40:43更新
学习了xpath语言,利用lxml库,可以代替re正则表达式
相比正则表达式,xpath更加简单简洁!
注意tree的两种创建方式的不同:本地文件和网络请求
使用xpath要注重标签之间的结构!找好属性即其值,尽量缩小范围,不然很容易多得!
from selenium import webdriver
import time
import threading
from lxml import etree
def blbl_uid_get(uid):
url="https://space.bilibili.com/"+str(uid)
# 不开网页显示
option = webdriver.ChromeOptions()
option.add_argument("headless")
# 使用selenium模块得到网页完整源码
driver=webdriver.Chrome(chrome_options=option)
driver.get(url)
time.sleep(2)
respond=driver.page_source
with open("blbl_xpath.html","wb") as f:
f.write(respond.encode())
# 利用xpath提取内容(本地调用方式!)
# paser=etree.HTMLParser(encoding='utf-8')
# tree=etree.parse('blbl_xpath.html',parser=paser)
# 利用xpath提取内容(互联网中响应)
tree=etree.HTML(respond)
up_name=tree.xpath('//div[@class="h-basic"]//span[@id="h-name"]/text()')
fans_num=tree.xpath('//div[@class="n-statistics"]//p[@id="n-fs"]/text()')[0].replace('\n','').replace(' ','')
# statistics=tree.xpath('//div[@class="n-statistics"]//p[@id="n-bf"]/text()')
work_title=tree.xpath('//div[@class="content clearfix"]//a[@class="title"]/text()')
work_length=tree.xpath('//div[@class="content clearfix"]//span[@class="length"]/text()')
work_play=tree.xpath('//div[@class="content clearfix"]//span[@class="play"]/text()')
work_time=tree.xpath('//div[@class="content clearfix"]//span[@class="time"]/text()')
min_num=min(len(work_time),len(work_length),len(work_title),len(work_play))
# 摘取要寻找的信息
record=""
record="up昵称:"+up_name[0]+"\n"+"粉丝数:"+fans_num+'\n'
if(min_num!=0):
record+='代表作:'+'\n'
for i in range(0,min_num):
record+="作品名:"+work_title[i]+"\n"+"时长:"+work_length[i]+"\n"+"播放量:"+work_play[i].replace('\n','').replace(' ','')+"\n"+"发布时间:"+work_time[i].replace('\n','').replace(' ','')
record+='\n\n'
# 写入文件
with open("blbl_xpath_2.txt","w+",encoding='utf-8') as f:
f.write(record)
f.close()
# 一定要quit
driver.quit()
# 并发执行爬虫
for i in range(348651375,348651390):
t = threading.Thread(target=blbl_uid_get, args=(i,))
t.start()
结果如下:
up昵称:68228791709_bili
粉丝数:0
up昵称:-SWQ-
粉丝数:27
代表作:
作品名:《刺客信条》6分49秒极限攀爬,同步率1000%
时长:04:18
播放量:164
发布时间:2022-3-20作品名:《消逝的光芒》对断桥、云端的向往以及信仰之跃
时长:09:35
播放量:419
发布时间:2022-2-1作品名:《生化危机2重制版》克莱尔打光弹药后手刃威廉G4
时长:12:14
播放量:310
发布时间:2022-2-1作品名:在西电中秋快乐的一天
时长:07:07
播放量:166
发布时间:2021-9-22作品名:4年菜鸡唯一一次五杀
时长:00:52
播放量:158
发布时间:2021-9-10作品名:沙雕室友们的日常
时长:00:21
播放量:51
发布时间:2020-8-22作品名:2020班级元旦晚会快来康康
时长:03:03
播放量:109
发布时间:2020-1-12作品名:社会我祥哥,同学冒死拍班主任
时长:00:13
播放量:114
发布时间:2019-8-19作品名:【建筑模型】建模锦标赛中华庭院模型展示
时长:02:39
播放量:2797
发布时间:2019-8-19
up昵称:p604904
粉丝数:0
up昵称:78992601564_bili
粉丝数:0
up昵称:10292619012_bili
粉丝数:1
up昵称:DMAP_
粉丝数:9
代表作:
作品名:拍拍猫猫
时长:02:03
播放量:89
发布时间:2022-11-29
up昵称:82212894921_bili
粉丝数:0
up昵称:bili75588510448
粉丝数:0
up昵称:丁嘉丽12334
粉丝数:0
up昵称:68228791709_bili
粉丝数:0
up昵称:80204814302_bili
粉丝数:0
up昵称:t229231
粉丝数:0
up昵称:chnksxf
粉丝数:0
up昵称:GH952105677
粉丝数:0
up昵称:52393731947_bili
粉丝数:0
up昵称:流口水的南方
粉丝数:0
本文转自 https://blog.csdn.net/qq_32971095/article/details/129629331,如有侵权,请联系删除。