selenium python虚拟点击网页 爬虫翻页功能 href=javascript:void(0)怎么翻页
在爬虫翻页的时候,url是不变的,也就是说网站是通过javascript动态加载下一页的。
当我们打开source code,会发现翻页按钮的href不是一个url而是:javascript:void(0)
针对这种情况,我们可以用selenium进行虚拟点击
准备工作
-
查看自己的chrome版本,在右上角三个点,Help - About Google Chrome
-
安装和自己chrome版本相匹配的chrome driver 境内下载地址
. -
不用纠结64还是32,都下32bit的,只有32bit。
-
下载完zip后解压,将chromedriver.exe文件复制到Google/Chrome/Application目录下:
具体目录:C:\Program Files (x86)\Google\Chrome\Application -
也复制到Python或者Anaconda3目录下。C:\Users\User_Name\Anaconda3
-
下载安装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)
我想要在一堆帖子中,找到标题含有“社会责任报告”的,第一页如果没有需要进入第二页。
一些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
先通过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()
本文地址:https://blog.csdn.net/wendyw1999/article/details/107414953
上一篇: 解析Python编程中的包结构
下一篇: 微博营销进入到精准策略时代