介绍
这篇文章主要介绍Python怎么使用硒+ BeautifulSoup爬取淘宝搜索页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
使用硒驱动chrome页面,获得淘宝信息并用BeautifulSoup分析得到结果。
使用硒时注意页面的加载判断,以及加载超时的异常处理。
import json import 再保险 得到bs4 import  BeautifulSoup 得到selenium import  webdriver 得到selenium.common.exceptions import  TimeoutException 得到selenium.webdriver.common.by import 得到selenium.webdriver.support.ui import  WebDriverWait 得到selenium.webdriver.support import  expected_conditions as 电子商务 时间=browser webdriver.Chrome () #,浏览器需要多次使用,所以单独拿出来。设置一个最长的等待时间,等待目标加载完成 时间=wait WebDriverWait(浏览器,10) def 搜索(关键字): ,#等容易出现加载时间长的问题,因此用尝试来捕捉异常 ,试一试: ,browser.get (& # 39; https://www.taobao.com& # 39;) ,#加载需要一定时间的,设置了等待时间,等待加载 ,#输入按钮的加载等待=,,input  wait.until ( #,才能设置加载目标,它是一个选择器,参数是需要选择方式和等待加载的内容 EC.presence_of_element_located才能((By.CSS_SELECTOR,“# q")), #,选择CSS选择器和选择内容 ,) ,#提交按钮=,,submit  wait.until ( #才能,EC后面是选择条件,按钮的加载条件最好的是element_to_be_clickable,意思为元素可以点击的 EC.element_to_be_clickable才能((By.CSS_SELECTOR,“# J_TSearchForm 祝辞,div.search-button 祝辞,button")) ,) ,input.send_keys(关键字),#,send_keys对输入框输入内容 ,submit.click(), #,提交搜索内容,进入下一个页面 ,#等待页码元素加载完成,并返回最大页码数=,,total  wait.until ( EC.presence_of_element_located才能((By.CSS_SELECTOR,“# mainsrp-pager 祝辞,div 祝辞,div 祝辞,div 祝辞,div.total")) ,) ,#等待加载完成后获取信息 ,get_products () return total.text ,except TimeoutException: ,#超时后重新请求,因此递归调用 ,return 搜索() def next_page (page_number): ,试一试: ,#页码输入框和翻页按钮=,,input  wait.until ( EC.presence_of_element_located才能((By.CSS_SELECTOR,“# mainsrp-pager 祝辞,div 祝辞,div 祝辞,div 祝辞,div.form 祝辞,input")) ,) ,#提交按钮=,,submit  wait.until ( EC.element_to_be_clickable才能( ,,(By.CSS_SELECTOR,“# mainsrp-pager 祝辞,div 祝辞,div 祝辞,div 祝辞,div.form 祝辞,span.btn.J_Submit")) ,) ,input.clear () ,input.send_keys (page_number) ,submit.click () ,#判断翻页成功 ,wait.until ( EC.text_to_be_present_in_element (By.CSS_SELECTOR,才能 ,,,,,& # 39;# mainsrp-pager 祝辞,div 祝辞,div 祝辞,div 祝辞,ul 祝辞,li.item.active 祝辞,跨度# 39;), ,,,,,str (page_number))) ,get_products () ,except TimeoutException: ,return next_page (page_number) def get_products (): ,#判断单个页面是否被加载出来 ,wait.until (EC.presence_of_element_located ((By.CSS_SELECTOR, & # 39; # mainsrp-itemlist .items .item& # 39;)))=,,html  browser.page_source #,获取页面源代码,所有的 ,#使用BS进行分析=,,soup  BeautifulSoup (html、, & # 39; lxml # 39;)=,,items  soup.select (& # 39; # mainsrp-itemlist .items .item& # 39;) ,for item 拷贝项目:=,,image  item.select (& # 39; .pic img # 39;) [0] [& # 39; data-src& # 39;】=,,price  item.select (& # 39; .price 强# 39;)[0]。text=,,deal  item.select (& # 39; .deal-cnt& # 39;) [0]。text (: 3)=,,title  item.select (& # 39; .title& # 39;) [0] .text.strip ()=,,shop  item.select (& # 39; .shop& # 39;) [0] .text.strip () ,位置=,item.select (& # 39; .location& # 39;) [0]。text ,product =, { & # 39;才能形象# 39;:,形象, & # 39;才能价格# 39;:,价格, & # 39;才能交易# 39;:,, & # 39;才能夺冠# 39;:,标题, & # 39;才能商店# 39;:,商店, & # 39;才能位置# 39;:位置 ,} ,save_text(产品),#,下载内容 def save_text(产品): ,#保存为txt文件,一个追加写模式,编码模式utf - 8 ,with 开放(& # 39;text.txt& # 39;,, & # 39;一个# 39;,,编码=& # 39;utf - 8 # 39;), as f: ,#使用JSON把字典转换为str格式,加换行符 ,f.write (json.dumps(产品,,ensure_ascii=False), +, & # 39; \ n # 39;) ,f.close () def main (): ,#通过关键字在淘宝进行搜索=,total 搜索(& # 39;美食& # 39;) ,#用正则提取页码数字 ,total =, int (re.compile (& # 39; (\ d +) & # 39;) .search(总).group (1)) ,#翻页 范围,for 小姐:拷贝(2,+ 1):,#,循环包含前,不包含尾 ,next_page(我) ,browser.close () if __name__ ==, & # 39; __main__ # 39;: nullPython怎么使用硒+ BeautifulSoup爬取淘宝搜索页