鱼C论坛

 找回密码
 立即注册
查看: 1215|回复: 1

selenium爬虫淘宝

[复制链接]
发表于 2020-3-28 15:34:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
声明:1.可以采用我这里的cookie模拟登陆,用二维码扫描;2.翻页等都可以采用我这模块内容;3.但是我电脑太弱加网速太差(保存cookie我就用了50s,单独在idle运行爬取,直接死机),我最后查找结果是没有出来的,自己试试吧,我不保证
  1. from selenium import webdriver
  2. import time
  3. import json
  4. import re
  5. from selenium.webdriver.common.by import By
  6. from selenium.webdriver.support import expected_conditions as EC
  7. from selenium.webdriver.support.wait import WebDriverWait
  8. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  9. from pyquery import PyQuery as pq
  10. from config import *
  11. import pymongo

  12. #这里配置了一个MongoDB可以不需要,因为需要把MongoDB配置成服务器,还有config.py,以及MongoDB可视化Robomongo都是要下载的
  13. client = pymongo.MongoClient(MONGO_URL)
  14. db = client[MONGO_DB]
  15. #现在PhantomJS会出现warning,单个使用的话用建议用Chrome,需要配置驱动,具体是将PhantomJS和python.exe放到一起
  16. '''browser = webdriver.PhantomJS(service_args= SERVICE_ARGS)'''
  17. #这个是google的配置,要根据Chrome配置好驱动,和python.exe放到一起
  18. chrome_driver = r'C:\Users\Chysial\AppData\Local\Google\Chrome\Application\chromedriver.exe'
  19. browser  = webdriver.Chrome(chrome_driver)

  20. wait = WebDriverWait(browser,10)
  21. browser.set_window_size(1400,900)
  22. browser.get('https://www.taobao.com/')
  23. def get_cookies(browser):
  24.     #家里网速不好,时间根据网速自己改,最好用二维码扫描。没有expiry,cookies没有时限,不然就需要修改了
  25.     time.sleep(50)
  26.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt','w') as cookief:
  27.         cookief.write(json.dumps(browser.get_cookies()))
  28.     browser.close()
  29. def open_chrome(browser):
  30.     browser.delete_all_cookies()
  31.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
  32.         cookieslist = json.load(cookief)
  33.         for cookies in cookieslist:
  34.             browser.add_cookie(cookies)

  35. def search():
  36.     try:
  37.         input = wait.until(
  38.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#q'))
  39.         )
  40.         submit = wait.until(
  41.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#J_TSearchForm > div.search-button > button'))
  42.         )
  43.         input.send_keys("动漫周边")
  44.         submit.click()
  45.         total = wait.until(
  46.             EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total'))
  47.         )
  48.         get_products()
  49.         return total.text
  50.     except TimeoutException:
  51.         return search()

  52. def next_page(page_number):
  53.     try:
  54.         input = wait.until(
  55.             EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
  56.         )
  57.         submit = wait.until(
  58.             EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit'))
  59.         )
  60.         input.clear()
  61.         input.send_keys(page_number)
  62.         submit.click()
  63.         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)))
  64.         get_products()

  65.     except TimeoutException:
  66.         next_page(page_number)

  67. def get_products():
  68.     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-item .items .item')))
  69.     html = browser.page_source
  70.     doc = pq(html)
  71.     items = doc('#mainsrp-item .items .item').items()
  72.     for item in items:
  73.         product = {
  74.             'imgage' : item.find('.pic .img').attr('scr'),
  75.             'price' : item.find('.price').text(),
  76.             'deal' : item.find('.deal-cnt').text()[:-3],
  77.             'title' : item.find('.title').text(),
  78.             'shop' : item.find('.shop').text(),
  79.             'location' : item.find('.location').text()
  80.         }
  81.         print(product)
  82.         save_to_mongo(product)
  83. def save_to_mongo(rusult):
  84.     try:
  85.         if db[MONGO_TABLE].insert(result):
  86.             print('保存成功')
  87.     except Exception :
  88.         print('保存MongoDB错误',result)
  89. def main():
  90.     # 运行一次就行了,我这里就不重复了get_cookies(browser)
  91.     '''get_cookies(browser)'''
  92.     open_chrome(browser)
  93.     browser.refresh()
  94.     total = search()
  95.     total = int(re.compile('(\d+)').search(total).group(1))
  96.     for i in range(2,total + 1):
  97.         next_page(i)
  98.     browser.close()
  99. if __name__ == '__main__':
  100.     main()

  101. #在项目文件下,配置的config.py文件
  102. '''MONGO_URL = 'localhost'
  103. MONGO_DB = 'taobao'
  104. MONGO_TABLE = "product"
  105. SERVICE_ARGS= ['--load-images = false','--disk-cache = true']'''
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
六小鸭 + 1 + 1 我也穷

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-29 19:40:20 | 显示全部楼层
很不错,谢谢楼主!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-18 10:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表