本帖最后由 三滑稽甲苯 于 2022-1-11 23:46 编辑
前言
题目地址:https://ssr1.scrape.center/
主网站地址:https://scrape.center/
这是一个专供爬虫练习的网站,里面有各种类型的题目。我们从最简单的第一个开始,这个题目没有任何反爬措施,并且是静态网页,抓包都不用了。
过程
打开页面,单击下一页,网址变为:https://ssr1.scrape.center/page/2
观察到一共有10页,于是使用for i in range(1, 10): 来实现页数的遍历,使用f'{url}/page/{i}' (事先url = 'https://ssr1.scrape.center' )拼接网址
F12审查元素,可以通过el-card__body 这个class来遍历到所有的卡片
通过name 定位电影名,通过a 标签的href 属性辅以url拼接定位详情页面的链接
通过categories 定位一组标签,button 定位各个标签
通过info 定位国家、时长、上映时间
通过score 定位评分(这里需要数据清洗,因为直接获取text属性的话前面会有回车和空格)
完整代码
from requests import Session
from bs4 import BeautifulSoup as bs
from time import time
start = time()
x = Session()
url = 'https://ssr1.scrape.center'
for i in range(1, 10):
r = x.get(f'{url}/page/{i}')
soup = bs(r.text, 'html.parser')
cards = soup.find_all('div', class_='el-card__body')
print(f'Page {i}/10')
for card in cards:
print()
print(' ', card.h2.text)
tags = card.find('div', class_='categories').find_all('span')
print(' Score:', card.find('p', class_='score').text[-3:])
print(' Tags:', ' '.join([tags[i].text for i in range(len(tags))]))
infos = card.find_all('div', class_='info')
spans = infos[0].find_all('span')
print(' Country:', spans[0].text)
print(' Duration:', spans[2].text)
print(' Release date:', infos[1].text[-1:-3])
print(' Link:', url + card.find('a', class_='name')['href'])
print()
print(f'Time used: {time() - start}s')
效果图
|