淘宝爬虫

目前解决不了图形滑块验证问题,继续努力随时更新

from selenium import webdriver        #调用相关浏览器
from selenium.common.exceptions import TimeoutException    #超时异常
from selenium.webdriver.common.by import By    #查找方式
from selenium.webdriver.support import expected_conditions as EC    #等待条件为expected_conditions显示等待
from selenium.webdriver.support.wait import WebDriverWait    #指定最长时间
from urllib.parse import quote    #转化成URL需要的编码格式
from pyquery import PyQuery as pq   #解析库
import pymongo     #连接mongo数据库

browser = webdriver.Chrome()
wait=WebDriverWait(browser,10)   #指定最长时间为10s
KEYWORD='iPad'

MONGO_DB='taobao'
MONGO_COLLECTION='products'
client=pymongo.MongoClient(host='localhost',port=27017)    #创建数据库需要使用MongoClient对象以及url地址
db=client[MONGO_DB]     #数据库名
MAX_PAGE=100

def index_page(page):
    print('正在抓取第',page,'页')
    try:
        url='https://s.taobao.com/search?q='+quote(KEYWORD)
        browser.get(url)
        if page>1:
            input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager div.form>input')))  #调用until方法,显示等待中条件为presence_of_all_elements_located(等待节点加载出来,定位它),css选择器,选择#mainsrp-pager div.form>input(选择id=mainsrp-pager,然后选择以class=form的div节点为父节点的input节点)的节点搜索框
            submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form>span.btn.J_Submit')))  #element_to_be_clickable(节点可以点击)道理同上
            input.clear()
            input.send_keys(page)    #输入文字方法
            submit.click()   #点击按钮方法
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active>span'),str(page)))   #选择高亮的页码数,判断它是否等于我们所跳转的页数(str(page))
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-itemlist .items .item')))   #寻找每一个商品框,item与之后的内容间隔一个空格,所以选择的时候class属性直接指定为item
        get_products()
    except TimeoutException:
        index_page(page)
def get_products():
    html=browser.page_source   #page_sorce获取网页源代码
    doc=pq(html)
    items=doc('#mainsrp-itemlist .items .item').items()   #多个item节点存在需要遍历,items()方法会得到一个有关item节点的生成器
    for item in items:
        product={
            'image':item.find('.pic .J_ItemPic.img').attr('data-src'),
            'price':item.find('.price.g_price.g_price-highlight').text().replace('\n',' '),
            'deal':item.find('.deal-cnt').text(),
            'title':item.find('.row.row-2.title').text().replace('\n',' '),
            'shop':item.find('.shop').text(),
            'location':item.find('.locayion').text()
        }
        print(product)
        save_to_mongo(product)
def save_to_mongo(result):
    try:
        if db[MONGO_COLLECTION].insert_one(result):
            print('储存到MongoDB成功')
    except:
        print('储存到MongoDB失败')
def main():
    for i in range(1,MAX_PAGE+1):
        index_page(i)
    browser.close()
if __name__ == '__main__':
    main()





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值