selenium爬取图书信息
一.爬取某网页某类书的全部信息(书名,作者,价格,简介)
1.导入相关的库时间库selenium库等
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
2.先定义一个函数方便我们后面使用函数来将网页上的内容写入文件中
def get_info(driver):global page_numtime.sleep(5)eles = driver.find_elements(by=By.CLASS_NAME,value='book_item')for element in eles:element.click()handers = driver.window_handlesdriver.switch_to.window(handers[-1])time.sleep(5)book_name = driver.find_element(by=By.CLASS_NAME,value='book-name').textbook_auther = driver.find_element(by=By.CLASS_NAME,value='book-author').textbook_summary =driver.find_element(by=By.CLASS_NAME,value='book-summary').textbook_price =driver.find_element(by=By.CLASS_NAME,value='price').textfile.write("书名: "+book_name+'\n'+'作者: '+book_auther+'\n'+'书本简介: '+book_summary+'\n'+'价格: '+book_price+'\n'+"========================================"+'\n')driver.close()handers = driver.window_handlesdriver.switch_to.window(handers[-1])page_num += 1
handers = driver.window_handles 查询当前网页全部标签页以列表形式返回
driver.switch_to.window(handers[-1]) 将driver对象定位到最后一个标签页
3.先用创建写的方式打开一个文件,再进行一些浏览器的绑定操作,最后打开我们需要打开的网址
file = open("ppt图书信息.txt",'w')
edge_options = Options()
# edge_options.add_argument('--headless')
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("网站地址")
4.根据浏览器的检查元素功能找到搜索框对应的信息通过find_element()方法找到元素并输入信息回车
还需将driver定位到最后的标签页
driver.find_element(by= ,value=' ').send_keys("ppt"+Keys.RETURN)
handers = driver.window_handles
time.sleep(3)
driver.switch_to.window(handers[-1])
5.根据浏览器的检查元素功能找到”更多“这个元素对应的信息通过find_element()方法找到元素并点击
最后通过get_info()方法获取图书的全部信息并写入文件
并设置初始页数为0,在方法内会在读取后将页数加1
driver.find_element(by= ,value=' ').click()
handers = driver.window_handles
driver.switch_to.window(handers[-1])
page_num=0
get_info(driver)
6,在上数步骤读完第一页后继续通过循环继续往后读取后面网页数的图书信息,可以自己观察当前所需要读取的总共页数来控制循环的读取
我们在读取完一页后还需找到网页中的下一页并点击
while True:if page_num==13:breakdriver.find_element(by=By.CLASS_NAME,value='ivu-page-next').click()get_info(driver)
file.close()