赞
踩
对于采用异步加载技术的网页,有时候想通过逆向工程的方式来设计爬虫进行爬取会比较困难,因此,要想通过python获取异步加载数据往往可以使用Selenium模拟浏览器的方式来获取。
Selenium是一个用于Web应用程序测试的工具,它可以在浏览器中运行,模拟用户真实的浏览网页操作,也就是说可以实现浏览器加载页面,搜索关键字和点击翻页等等操作,因此,就算使用了异步加载技术的网页,也可以模拟翻页得到不同的网页,也就可以得到你想要的数据了。
Selenium模块在第三方库里面可以找到,使用pycharm软件,打开左上角PyCharm->项目->python解释器->preferences里面添加,结果如下图进行搜索安装即可。
由于Selenium自己不带有浏览器,因此需要配合我们自己电脑安装的浏览器来使用,这里我们是通过常用的Chrome浏览器来模拟实现爬取数据。具体可以模拟的操作主要有如下一些操作:输入框内容填写、点击按钮、截屏、下滑等,因此对于登录网站的时候,我们可以不再需要构造表单或者提交cookie来登录网站了,只需要通过python代码模拟输入《账号》和《密码》实现登录。
模拟的
(2)登录后获取数据的常用代码
备注:此处xpath和单独的xpath方法差异就是此处是在最后加.text,单独xpath是在路径里面加/text()
以上是selenium基本要点,现在让我们开始进行实践操刀,如何来对淘宝商品信息进行抓取。
工具和语言:Selenium+Chrome+PyCharm+Python
抓取平台:www.taobao.com
抓取思路:以抓取我最近想入手的投影仪商品为例
- from selenium import webdriver
- from lxml import etree
- import time
- import pymysql
-
- db = pymysql.connect(host='localhost', user='root', passwd='密码', db='库名称', port=3306, charset='utf8')
- print("数据库连接")
- cursor = db.cursor()
- cursor.execute("DROP TABLE IF EXISTS Learn_data.taobao_touyingyi_data")
- sql = """CREATE TABLE IF not EXISTS Learn_data.taobao_touyingyi_data (
- id int auto_increment primary key,
- price CHAR(100),
- sell CHAR(100),
- detail CHAR(100)
- )
- DEFAULT CHARSET=utf8"""
- cursor.execute(sql)
-
- driver=webdriver.Chrome()
- driver.maximize_window()
- def get_info(url,page):
- page=page+1
- driver.get(url)
- driver.implicitly_wait(10)
- selector=etree.HTML(driver.page_source)
- infos=selector.xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
- for info in infos:
- price = info.xpath('div[2]/div/div/strong/text()')[0]
- sell = info.xpath('div[2]/div/div[2]/text()')[0]
- detail = info.xpath('div[2]/div/div[2]/text()')[1]
-
- print(price,sell,detail)
-
- cursor.execute("insert into taobao_touyingyi_data (price,sell,detail)values(%s,%s,%s)",(str(price),str(sell),str(detail)))
-
- if page<=50:
- NextPage(url,page)
- else:
- pass
- def NextPage(url,page):
- print(url)
- driver.get(url)
- driver.implicitly_wait(10)
- driver.find_element_by_xpath('//a[@trace="srp_bottom_pagedown"]').click()
- time.sleep(4)
- driver.get(driver.current_url)
- driver.implicitly_wait(10)
- get_info(driver.current_url, page)
-
- if __name__=='__main__':
- page=1
- url='https://www.taobao.com/'
- driver.get(url)
- driver.implicitly_wait(10)
- driver.find_element_by_id('q').clear()
- driver.find_element_by_id('q').send_keys('商品名称')
- driver.find_element_by_class_name('btn-search').click()
-
- driver.find_element_by_id("fm-login-id").send_keys("账号")
- # 找到按钮的位置
- time.sleep(1)
- # 找到密码的位置
- driver.find_element_by_id("fm-login-password").send_keys("密码")
- # 确保账号和密码输入完成
- time.sleep(3)
- # 识别验证码
- # 找到图片地址
- ret = driver.find_element_by_class_name("fm-button")
- # 点击按钮
- ret.click()
- time.sleep(3)
- print(driver.current_url)
- get_info(driver.current_url,page)
- db.commit()
运行数据库结果如下:
以上就是Selenium模拟Chrome浏览器爬取淘宝商品投影仪信息数据的所有过程,后续会进一步进行数据分析,有兴趣的同学可以扫描下方二维码加关注,更多机器学习和Python分析实践案例等着你!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。