在爬虫翻页的时候,url是不变的,也就是说网站是通过javascript动态加载下一页的。
当我们打开source code,会发现翻页按钮的href不是一个url而是:javascript:void(0)
针对这种情况,我们可以用selenium进行虚拟点击
下载完zip后解压,将chromedriver.exe文件复制到Google/Chrome/Application目录下:
具体目录:C:\Program Files (x86)\Google\Chrome\Application
也复制到Python或者Anaconda3目录下。C:\Users\User_Name\Anaconda3
下载安装selenium:pip install selenium
完整代码:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import re
# 初始化driver
url = "http://data.eastmoney.com/notices/stock/688089.html"
options = Options()
options.add_argument("--headless") # 无界面
driver = webdriver.Chrome(options=options)
driver.get(url)
# 先print第一页的第一个帖子的标题
try:
title = driver.find_element_by_class_name("overflow")
print("current top article is: ")
print(title.text)
except:
print("can't find this tag")
# 点击“下一页”按钮
try:
next_page = driver.find_element_by_link_text("下一页")
next_page.click()
# 现在的driver就在第二页了
except:
#如果找不到,print something
print("Nothing found")
# print 第二页第一个帖子标题
try:
title = driver.find_element_by_class_name("overflow")
print("current top article is: ")
print(title.text)
except:
print("Nothing found")
driver.quit()
初始化driver
# initialize(url)
# url替换成自己要爬的网站
# 我这个网站是一个股票介绍,里面有很多的公告,有27页可以爬
url = "http://data.eastmoney.com/notices/stock/688089.html"
options = Options()
options.add_argument("--headless") # 无界面
driver = webdriver.Chrome(options=options)
driver.get(url)
我想要在一堆帖子中,找到标题含有“社会责任报告”的,第一页如果没有需要进入第二页。
driver.find_elements_by_class_name(“class_name”)
会获得一个list of elements
driver.find_element_by_class_name(“class_name”)
会获得单个element
driver.find_element_by_id(“id”)
driver.find_element_by_tag(“a”)
element.get_attribute(“id”)
id可以换成class/href/title等
更具体可以看documentation
先通过chrome的开发者工具,找到要获取的element的特点(独特的id/class等)
试一下获取这一页第一个帖子title:
title = driver.find_element_by_class_name("overflow")
print(title.text)
output:
688089:嘉必优2019年年度权益分派实施公告
driver.find_elements_by_link_text(“innerHTML”)
innerHTML就是tag里面的文字,这个非常有用,这样我们就可以找到”下一页“的dom element,也就是我们想要点击的按钮。
我们可以进行下一步操作,怎么点击呢。
try:
next_page = driver.find_element_by_link_text("下一页")
next_page.click()
# 现在的driver就在第二页了
except:
#如果找不到,print something
print("Nothing found")
测试一下看看我们是不是在第二页:
title = driver.find_element_by_class_name("overflow")
print(title.text)
# 还是找本页第一个帖子的标题,但是现在我们是在第二页,标题会和之前的不一样
output:
688089:嘉必优首次公开发行股票并在科创板上市网上发行申购情况及中签率公告
最后别忘了quit
不然会出现很糟糕的事情
driver.quit()