seleniun 爬取淘宝网
2024-10-19 08:59:05
import re
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq import pymongo MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'product' SERVICE_ARGS = ['--load-images=false', '--disk-cache=true'] KEYWORD = '美食' client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB] browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
wait = WebDriverWait(browser, 10) browser.set_window_size(1400, 900) def search():
print('正在搜索')
try:
browser.get('https://www.taobao.com')
input = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
)
submit = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
input.send_keys(KEYWORD)
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 search() def next_page(page_number):
print('正在翻页', page_number)
try:
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, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
get_products()
except TimeoutException:
next_page(page_number) def get_products():
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
html = browser.page_source
doc = pq(html)
items = doc('#mainsrp-itemlist .items .item').items()
for item in items:
product = {
'image': item.find('.pic .img').attr('src'),
'price': item.find('.price').text(),
'deal': item.find('.deal-cnt').text()[:-3],
'title': item.find('.title').text(),
'shop': item.find('.shop').text(),
'location': item.find('.location').text()
}
print(product)
save_to_mongo(product) def save_to_mongo(result):
try:
if db[MONGO_TABLE].insert(result):
print('存储到MONGODB成功', result)
except Exception:
print('存储到MONGODB失败', result) def main():
try:
total = search()
total = int(re.compile('(\d+)').search(total).group(1))
for i in range(2, total + 1):
next_page(i)
except Exception:
print('出错啦')
finally:
browser.close() if __name__ == '__main__':
main()
最新文章
- [WCF编程]12.事务:事务传播
- iOS--手势之谜
- js 获取当前日期时间3种格式化方法 yyyy-mm-dd hh:MM:ss
- hdu4750Count The Pairs(最小生成树找瓶颈边)
- 手机自带的显示基站命令(android手机定位,iphone基站定位)
- Spring的定时任务配置(转)
- 数据采集器移动手持打印POS终端(PDA)商超抄单方案-PDA抄单无线开单+进销存软件
- 用DzzOffice管理阿里云OSS
- Adobe Edge Animate--关于全局变量和全局方法的定义
- Android - 用Fragments实现动态UI - 创建灵活的UI
- TCP/IP 标志位 SYN ACK RST UTG PSH FIN
- shell中的数字
- loadrunner 运行脚本-Run-time Settings-ContentCheck简单设置
- Vert.x简介
- 阿里云服务器tomcat ./shutdown.sh关闭命令报错Could not contact localhost:8005. Tomcat may not be running.
- python-面向对象-14_eval函数
- javascript基础拾遗(十三)
- sparkSQL实际应用
- 简易扩展Visual Studio UnitTesting支持TestMethodCase
- 详解UML图之类图 (转)
热门文章
- Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止
- Laravel Query Builder 复杂查询案例:子查询实现分区查询 partition by
- day13 面向对象练习
- Intellij IDEA Organize Imports
- 在CentOS实现mysql数据库的自动备份
- Jmeter关于数据库的测试(mysql数据库)
- es6之函数扩展与对象扩展
- springboot+mybatis+shiro——登录认证和权限控制
- java三大特性(封装、继承、多态)
- Nodejs与mysql连接池的应用(pool)