项目的灵感
今天准备去码市上找几个实战的项目来练练手,于是就发现了这个项目(这个项目已经结束)。
他还有两个需求,后面两个需求都差不多,我就不再去写代码了。必要知识:
1.对于一些初级的知识,我之前的博客都有写,你们可以去看看
2.selenium的无界面化操作
self.opt = Options() self.opt.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错 self.opt.add_argument('window-size=1920x3000') # 设置浏览器分辨率 self.opt.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug self.opt.add_argument('--hide-scrollbars') # 隐藏滚动条,应对一些特殊页面 self.opt.add_argument('blink-settings=imagesEnabled=false') # 不加载图片,提升运行速度 self.opt.add_argument('--headless') # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败 # opt.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置 self.driver=Chrome(options=self.opt) #创建无界面对象 |
由于我主要是封装到类里面的,所以会有self,不需要的只要删除self就好。
3.xlwt的保存数据
# 创建一个workbook 设置编码 workbook = xlwt.Workbook(encoding='utf-8') # 创建一个worksheet worksheet = workbook.add_sheet('股票最新价格') # 写入excel # 参数对应 行, 列, 值 worksheet.write(0, 0, "个股代码") worksheet.write(0, 1, "个股名称") worksheet.write(0, 2, "最新价格") for i in range(len(number)): worksheet.write(i + 1, 0, number[i]) worksheet.write(i + 1, 1, name[i]) worksheet.write(i + 1, 2, money[i]) workbook.save('股票最新价格.xls') |
完整的代码展示
import xlwt import parsel from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options import time class get_gupaio(): def __init__(self): url = "http://quote.eastmoney.com/center/gridlist.html" self.opt = Options() self.opt.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错 self.opt.add_argument('window-size=1920x3000') # 设置浏览器分辨率 self.opt.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug self.opt.add_argument('--hide-scrollbars') # 隐藏滚动条,应对一些特殊页面 self.opt.add_argument('blink-settings=imagesEnabled=false') # 不加载图片,提升运行速度 self.opt.add_argument('--headless') # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败 # opt.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手动指定使用的浏览器位置 self.driver=Chrome(options=self.opt) #创建无界面对象 self.driver.implicitly_wait(10) self.driver.get(url) def get_one_page(self,content): # print(content) sel=parsel.Selector(content) number=sel.xpath("//tbody/tr/td[2]/a/text() ").getall() # print(number) # print(len(number)) name=sel.xpath("//tbody/tr/td[@class='mywidth']/a/text()").getall() # print(name) money=sel.xpath("//tbody/tr/td[5]/span/text()").getall() # print(money) # print(len(money)) return number,name,money def save_data(self,number,name,money): # 创建一个workbook 设置编码 workbook = xlwt.Workbook(encoding='utf-8') # 创建一个worksheet worksheet = workbook.add_sheet('股票最新价格') # 写入excel # 参数对应 行, 列, 值 worksheet.write(0, 0, "个股代码") worksheet.write(0, 1, "个股名称") worksheet.write(0, 2, "最新价格") for i in range(len(number)): worksheet.write(i + 1, 0, number[i]) worksheet.write(i + 1, 1, name[i]) worksheet.write(i + 1, 2, money[i]) workbook.save('股票最新价格.xls') def run(self): number = [] name = [] money = [] for i in range(10): self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/input").clear() self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/input").send_keys(i + 1) self.driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div[5]/div/div[2]/div/a[3]").click() time.sleep(1) content = self.driver.page_source (a, b, c) = self.get_one_page(content) number.extend(a) name.extend(b) money.extend(c) print(number) print(name) print(money) self.save_data(number, name, money) self.driver.quit() get_gupaio().run() |
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理