使用selenium获取图书信息实例(完整代码)
本文以人名邮电出版社官网为例来获取相关搜索内容图书的价格和书名信息,得到的结果再通过pandas里的DataFrame生成一个简单的表格。完整代码和有关解析如下:
#导入selenium的相关库
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import Bydriver=webdriver.Chrome() #使用谷歌浏览器新建窗口,并创建一个名为driver的对象
driver.get('https://www.ptpress.com.cn/shopping/index') #里面的是人名邮电出版社的网址
wait=WebDriverWait(driver,20) #页面等待最长时间为20秒,否则报错#下面括号里长长的内容是利用谷歌开发者工具获取的搜索框selector
search_btn=driver.find_element_by_css_selector(
'body > div.classifySearch-p > div > div.classifySearchBar > div.allSearch > input'
)
search_btn.send_keys('python编程') #传送数据到弹出的那个浏览器搜索框里面#设置等待的特定条件,括号里长长的内容是开发者工具里面定位到搜索的selector
confirm_btn=wait.until(
EC.element_to_be_clickable(
(By.CSS_SELECTOR,'body > div.classifySearch-p > div > div.classifySearchBar > div.allSearch > a > i')
)
)
confirm_btn.click() #相当于手动点击搜索#转换当前窗口到第二次出现的那个窗口下,以便获取网页内容
driver.switch_to_window(driver.window_handles[1])
html=driver.page_source
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
dat=[i.text for i in soup.select('#search > div.book-floor > ul > li > p')] #获取到价格和书名信息(呈现间隔分布)num1=dat[::2] #所有书名信息
num2=dat[1::2] #所有价格信息
import pandas as pd
pd.DataFrame({'书名':num1,'价格':num2})#输出结果如下图