在数据分析课上跟着老师一步步学会了一点爬虫小技巧,觉得很有趣
首先需要配置Chrome浏览器的web scraper插件和Web应用程序测试工具Selenium Webdriver
web scraper 下载地址:https://www.webscraper.io
Selenium Webdriver 下载地址:https://docs.seleniumhq.org/projects/webdriver/
from selenium import webdriver
# Keys()类提供了键盘上几乎所有按键的方法,这个类可用来模拟键盘上的按键,包括各种组合键
from selenium.webdriver.common.keys import Keys
# 将用pandas中的DataFrame(一种二维的表格型数据结构)记录爬下的数据
import pandas as pd
from datetime import datetime
import numpy as np
import time
import os
def gethtml(url):
#指定浏览器为Chrome
browser = webdriver.Chrome()
# 访问页面
browser.get(url)
#隐式等待10秒
browser.implicitly_wait(10)
return(browser)
# 指定要爬的网址:bilibili刀剑神域主页
url = 'https://www.bilibili.com/bangumi/media/md130412/?from=search&seid=6052946840185779930#short'
browser = gethtml(url)
print('连接成功,开始爬数据')
XPath是一个符合HTML标准的选择器,使用它可以定位到我们要用的元素在页面上的哪个位置。那么,如何获取XPath?
用Chrome浏览器访问网页 - 单击右键 - 单击“检查” - 进入web scraper界面 - 点击最左上角的箭头(会提示“Select an element in the page to inspect it”) - 在网页上点击要定位的元素 - 单击右键 - 单击“Copy” - 单击“Copy XPath” - 打开记事本 - 粘贴
# 通过XPath定位我们要爬的元素“短评”
comment_number_str = browser.find_element_by_xpath('//*[@id="app"]/div[2]/div[1]/ul/li[3]').text
# 记录短评总数, [4:-1]取第4个到倒数第1个(左闭右开), strip()剔除字符串中的空格
numcount = int(comment_number_str[4:-1].strip())
每一条用户短评所在的容器都对应一个clearfix,因此可以通过记录clearfix的数目得知我们当前页面显示的短评总数
页面默认只显示20条短评,但显然我们想要更多。通过观察,我们发现bilibili的短评在我们滑到页面底端的时候会自动加载更多,因此可以通过Webdriver的Keys()类模拟手动操作