首先,需要说明的是Scrapy是一个强大的Python爬虫框架,可以帮助我们快速高效地爬取网页信息。但是对于一些需要登录后才能访问的网站,我们需要使用到Selenium来实现模拟浏览器登录,获取cookie后使用Scrapy进行后续的爬取。
下面是大致的操作流程:
- 安装Scrapy和Selenium库
pip install scrapy selenium
- 安装浏览器驱动
你需要根据你正在使用的浏览器下载相应的驱动程序
Chrome浏览器驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/
Firefox浏览器驱动下载地址:https://github.com/mozilla/geckodriver/releases
- 使用Selenium模拟用户登录
from selenium import webdriver
import time
driver = webdriver.Chrome() #启动Chrome浏览器
driver.get("https://music.163.com/") #打开网易云音乐首页
time.sleep(2) # 暂停2秒,等待页面加载
# 点击登录按钮
driver.switch_to.frame("contentFrame")
login_button = driver.find_element_by_css_selector("a[href='javascript:;']")
login_button.click()
time.sleep(1)
# 切换到账号密码登录
driver.switch_to.frame("contentFrame")
login_method = driver.find_element_by_css_selector("a[data-action='login']")
login_method.click()
time.sleep(1)
# 输入账号密码
driver.switch_to.frame("contentFrame")
username_input = driver.find_element_by_name('username')
password_input = driver.find_element_by_name('password')
username_input.send_keys("your_username")
password_input.send_keys("your_password")
time.sleep(1)
# 点击登录
login_btn = driver.find_element_by_css_selector(".j-primary")
login_btn.click()
time.sleep(2)
# 保存cookie
cookies = driver.get_cookies()
driver.quit()
使用Selenium模拟用户登录,向网站提交账号密码,完成登录操作。在获取cookie之前需要等待一段时间,否则可能会出现cookie没有完全加载的情况。
- 使用Scrapy爬取数据
在获取到cookie之后,我们就可以利用Scrapy进行数据爬取了。这里举一个例子,爬取网易云音乐个人喜爱歌单的所有歌曲信息。
import scrapy
class MyMusicSpider(scrapy.Spider):
name = 'my_music_spider'
allowed_domains = ['music.163.com']
start_urls = ['https://music.163.com/']
def start_requests(self):
# 添加cookie信息,模拟登录状态
cookie = {i['name']: i['value'] for i in cookies}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}
yield scrapy.Request(self.start_urls[0], headers=headers, cookies=cookie)
def parse(self, response):
# 解析个人喜爱歌单url
url = response.css('a[href="/my/music?type=loved"]').attrib['href']
yield response.follow(url, self.parse_music_list)
def parse_music_list(self, response):
# 获取歌单中的所有歌曲信息
for song_item in response.css('.srchsongst .item'):
song_name = song_item.css('.ttl a b::text').get()
singer_name = song_item.css('.text a::text').get()
print(song_name, singer_name)
上述代码中是一个Scrapy爬虫的基本框架,其中使用了之前获取到的cookie信息,模拟登录状态。然后通过解析网页内容,找到个人喜爱歌单的url,进而获取其中的所有歌曲信息。
至此,我们完成了Scrapy和Selenium配合进行自动登录爬取网易云音乐个人喜爱歌单的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单 - Python技术站