爬淘宝的iPad 即以搜索为主 按照页号爬取

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
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
from pyquery import PyQuery as pq
import pymongo


browser=webdriver.Chrome()
wait = WebDriverWait(browser, 10)
KEYWORD="ipad" #所要爬去的对象    
MONGO_URL="localhost" #数据库的连接
MONGO_DB="taobao"    #数据库的连接
MONGO_COLLECTION="products"    #数据库的连接
client=pymongo.MongoClient(MONGO_URL)    #数据库的连接
db=client[MONGO_DB]        #数据库的连接
MAX_PAGE=3    #设置爬去的页数

def index_page(page):
    print("正在爬去弟",page,"页")
    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 .input')))
        submit = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager .J_Submit')))
    '''
                input= browser.find_element_by_css_selector("#mainsrp-pager .J_Input")
        submit=browser.find_element_by_css_selector("#mainsrp-pager .J_Submit")
#这里主要是对按钮确定的查找与页码的输入,用任何选择器都可以 
    '''
        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))) 
'''
    这里十分重要主要在于网页的爬取速度远远大于网页的打开速度所以运用此函数去确认网页是否打开,
只有打开了才能爬取正确结果,为什么按自己的思路爬取的时候会发生这个原因在这里
'''
    get_products()    


def get_products():
    html=browser.page_source    #获取源代码

    doc=pq(html) #使用pyquery库解析网页,即css选择器用什么都可以            
    items=doc("#mainsrp-itemlist .items .item").items()
    for item in items:
        product={
            "image":item.find('.pic .img').attr("data-src"),
            "price":item.find(".price").text(),
            "deal":item.find(".deal-cnt").text(),
            "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):    #数据库的存储
    """
    保存至MongoDB
    :param result: 结果
    """
    try:
        if db[MONGO_COLLECTION].insert(result):
            print('存储到MongoDB成功')
    except Exception:
        print('存储到MongoDB失败')
def main():
    for i in range(1, MAX_PAGE + 1):
        index_page(i)



if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值