自动化爬取淘宝数据--(保存到文本中)
2018-01-27 09:59
239 查看
普通版本的爬取淘宝网页
#淘宝商品信息#从selenium中引入webdriver
from selenium import webdriver
import time
#输入查询关键词
keyword=input('请输入要查询的商品关键词:')
#1.创建firefox浏览器对象
driver=webdriver.Firefox()
#2.打开淘宝网址
driver.get('http://www.taobao.com')
#3.通过id找到输入框
search_input=driver.find_element_by_id('q')
#4.输入搜索内容
search_input.send_keys(keyword)
#5.通过class找到搜索按钮
search_btn=driver.find_element_by_class_name('btn-search')
#6.点击搜索按钮
search_btn.click()
#休眠2秒
time.sleep(2)
#1.打开文件 encoding=utf-8 指定文件的字符编码
file_handle=open('%s.txt'%keyword,'w',encoding='utf-8')
for x in range(1,2):
print('正在获取第%s页数据,请稍后......'%x)
#for 循环执行5次
for x in range(1,11,2):
#休眠1秒
time.sleep(1)
#把x转换小数
j=x/10
#拼接让浏览器滚动的js代码
#%f float类型数据占位符
js='document.documentElement.scrollTop = document.documentElement.scrollHeight *%f '%j
#执行让浏览器滚动的js代码
driver.execute_script(js)
有的产品信息搜索时 属性和属性值不同:
#查找当前页所有的商品信息,返回的是一个列表(elements查找多个)
#电脑,鼠标、键盘.........class_name填写 info-cont
#其他的产品........class_name填写 J_MouserOnverReq
shops=driver.find_elements_by_class_name('J_MouserOnverReq')
# print(len(shops))
#如果没有找到数据,换另一种方式去找
if len(shops)==0:
shops = driver.find_elements_by_class_name('info-cont')
#for循环遍历列表,取出每一个商品的信息 for shop in shops: #输出查看商品信息 # print(shop.text) file_handle.write(shop.text) file_handle.write('\n\n')
找到下一页的法一:
# # 找到下一页,点击
# next=driver.find_element_by_link_text('下一页')
# next.click()找到下一页法二:
#找到下一页,点击
#找到li标签下一页
next_li=driver.find_element_by_class_name('next')
# print(next_li.text)
next_li.click()
函数版本的淘宝自动化爬取
初始化时传入keyword,self.keyword,是它本身具有的属性,将传入的keyword赋值给self.keyword#淘宝商品信息
#从selenium中引入webdriver
from selenium import webdriver
import time
#声明一个类
class TaoBao(object):
#初始化时,传递要查询的关键词
def __init__(self,keyword):
self.keyword=keyword
def start_taobao(self):
#1.创建firefox浏览器对象
driver=webdriver.Firefox()
#2.打开淘宝网址
driver.get('http://www.taobao.com')
#3.通过id找到输入框
search_input=driver.find_element_by_id('q')
#4.输入搜索内容
search_input.send_keys(self.keyword)
#5.通过class找到搜索按钮
search_btn=driver.find_element_by_class_name('btn-search')
#6.点击搜索按钮
search_btn.click()
#休眠2秒
time.sleep(2)
#1.打开文件 encoding=utf-8 指定文件的字符编码
file_handle=open('%s.txt'%self.keyword,'w',encoding='utf-8')
for x in range(1,2):
print('正在获取第%s页数据,请稍后......'%x)
#for 循环执行5次
for x in range(1,11,2):
#休眠1秒
time.sleep(1)
#把x转换小数
j=x/10
#拼接让浏览器滚动的js代码
#%f float类型数据占位符
js='document.documentElement.scrollTop = document.documentElement.scrollHeight *%f '%j
#执行让浏览器滚动的js代码
driver.execute_script(js)
#查找当前页所有的商品信息,返回的是一个列表(elements查找多个)
#电脑,鼠标、键盘.........class_name填写 info-cont
#其他的产品........class_name填写 J_MouserOnverReq
shops=driver.find_elements_by_class_name('J_MouserOnverReq')
# print(len(shops))
#如果没有找到数据,换另一种方式去找
if len(shops)==0:
shops = driver.find_elements_by_class_name('info-cont')
#for循环遍历列表,取出每一个商品的信息
for shop in shops:
#输出查看商品信息
# print(shop.text)
file_handle.write(shop.text)
file_handle.write('\n\n')
#找到下一页,点击
#找到li标签下一页
next_li=driver.find_element_by_class_name('next')
# print(next_li.text)
next_li.click()
# 3.关闭文件
# 退出浏览器
driver.quit()
#如果是从当前文件直接运行的,执行以下代码
if __name__=='__main__':
keyword=input('请输入查询关键词:')
tb=TaoBao(keyword)
tb.start_taobao()
#输出 # print(__name__) #__name__值为__main__表示是从当前文件直接运行 #__name__ 值为 当前文件名称 表示别的文件引用执行的
相关文章推荐
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- Bootstrap wysiwyg,将富文本数据保存到mysql
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- 键盘输入流,接收大文本数据,并输入一个图片路径,之后将这些数据保存在数据表中
- python 之pickle模块--输出保存到文本(基本的数据序列和反序列化)
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- JDBC之大段文本数据的保存与读取
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- 海量文本数据保存到数据库思路
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++读取txt数据为二维数组 将数据保存到txt文本中
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- Python实例之抓取淘宝商品数据(json型数据)并保存为TXT
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- 将List<Map<String,String>>中的数据输出保存到TXT文本文件中
- 质数保存在文本中,有上万个用空格隔开的数据,有数十个文件,寻找文件夹中所有质数文件的回文数等
- js读取本地磁盘文本文件并保存为JSON数据(有格式的文本)
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果