surepj 发表于 2021-12-20 09:57

【Python】-初学笔记-B站热门视频排行爬虫(re和xpath方法)

初学了点Python爬虫,看什么都想爬一爬,但又一想,爬了干嘛呢?
感觉re正则的表达,和xpath比较易懂一点。就是模板上套一套内容
BeautifulSoup没搞懂,欢迎大家再搞个bs4版的,学习学习。

re版:
import requests,re

url = 'https://www.bilibili.com/v/popular/rank/all'
resp = requests.get(url)
page_content = resp.text
resp.close()
obj = re.compile(r'data-rank="(?P<rank>.*?)" class="rank-item">.*?<div class="img"><a href="(?P<href>.*?)" target=.*?class="title">(?P<title>.*?)</a>.*?alt="play">.*?(?P<hot>.*?)</span>',re.S)
result = obj.finditer(page_content)
count = 0
for i in result:
    rank = i.group('rank')
    title = i.group('title').strip()
    hot = i.group('hot').strip()
    href = i.group('href')
    print(rank,title,hot,'https:'+href)
    count += 1
    if count >= 20:# 展示的数量
      break
print('done')

xpath版:
import requests
from lxml import etree

url = 'https://www.bilibili.com/v/popular/rank/all'
resp = requests.get(url)
resp.close()
html = etree.HTML(resp.text)
lists = html.xpath('//*[@id="app"]/div/div/div/ul/li')# 展示的数量
for i in lists:
    rank = i.xpath('./div/div/i/span/text()')
    title = i.xpath('./div/div/a/text()')
    hot = "".join(i.xpath('./div/div/div/div/span/text()')).strip()
    href = i.xpath('./div/div/a/@href')
    print(rank,title,hot,"https:" + href)
print('done')

运行效果:
http://inews.gtimg.com/newsapp_ls/0/14326165609/0

kanmanli 发表于 2021-12-20 15:13

surepj 发表于 2021-12-20 19:24

松仔 发表于 2021-12-20 13:20
invalid syntax小白太难了

这是语法报错,我这边运行没有显示报错。是不是什么第三方库没安装,就是 import后的库

nidiexixi 发表于 2021-12-20 10:09

感谢分享

t1r0 发表于 2021-12-20 10:38

可以在升级一下,做个多线程快速处理

LYKDR 发表于 2021-12-20 10:53

新手表示能看得懂这个代码

surepj 发表于 2021-12-20 10:56

t1r0 发表于 2021-12-20 10:38
可以在升级一下,做个多线程快速处理

还不会多线程处理,不过数据也不多

surepj 发表于 2021-12-20 10:58

LYKDR 发表于 2021-12-20 10:53
新手表示能看得懂这个代码

一起学习学习,哈哈

Atomhua 发表于 2021-12-20 11:11

一起学习学习,哈哈

jjl 发表于 2021-12-20 11:55

学习支持一下

ZHANchenggu 发表于 2021-12-20 12:09

一起学习,共同进步

xyzbrave 发表于 2021-12-20 12:10

学习支持一下
页: [1] 2
查看完整版本: 【Python】-初学笔记-B站热门视频排行爬虫(re和xpath方法)