selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页

在爬虫翻页的时候,url是不变的,也就是说网站是通过javascript动态加载下一页的。
当我们打开source code,会发现翻页按钮的href不是一个url而是:javascript:void(0)
针对这种情况,我们可以用selenium进行虚拟点击

准备工作

  1. 查看自己的chrome版本,在右上角三个点,Help - About Google Chrome
    selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页_第1张图片

  2. 安装和自己chrome版本相匹配的chrome driver 境内下载地址
    .
    selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页_第2张图片

  3. 不用纠结64还是32,都下32bit的,只有32bit。
    selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页_第3张图片

  4. 下载完zip后解压,将chromedriver.exe文件复制到Google/Chrome/Application目录下:
    具体目录:C:\Program Files (x86)\Google\Chrome\Application

  5. 也复制到Python或者Anaconda3目录下。C:\Users\User_Name\Anaconda3

  6. 下载安装selenium:pip install selenium

Python中使用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)

我想要在一堆帖子中,找到标题含有“社会责任报告”的,第一页如果没有需要进入第二页。
selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页_第4张图片

一些driver的操作:

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

selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页_第5张图片
先通过chrome的开发者工具,找到要获取的element的特点(独特的id/class等)
试一下获取这一页第一个帖子title:

title = driver.find_element_by_class_name("overflow")
print(title.text)

output:

688089:嘉必优2019年年度权益分派实施公告

最重要的是可以通过innerHTML找element

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()

你可能感兴趣的:(爬虫,python,selenium)