鱼C论坛

 找回密码
 立即注册
查看: 1100|回复: 0

[作品展示] 改【爬百度图片】坂井泉水

[复制链接]
发表于 2020-3-30 12:47:18 | 显示全部楼层 |阅读模式

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

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

x
百度图片的是下拉出来后续的item,一般只能爬取前20个图片,昨天的写错了,改了下
  1. from selenium import webdriver
  2. import time
  3. import json
  4. import re
  5. import random
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.common.keys import Keys
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.webdriver.support.wait import WebDriverWait
  10. from selenium.common.exceptions import TimeoutException, NoSuchElementException
  11. from pyquery import PyQuery as pq
  12. import os,os.path
  13. import urllib.request

  14. #配置模拟器
  15. chrome_driver = r'C:\Users\Chysial\AppData\Local\Google\Chrome\Application\chromedriver.exe'
  16. browser = webdriver.Chrome(chrome_driver)
  17. wait = WebDriverWait(browser,10)
  18. browser.get('https://www.baidu.com/')

  19. #cookie模拟登陆,get一般运行一次就行,我因为调试后边把它注释了
  20. def get_cookies(browser):
  21.     #cookies没有时限方法,一种方法直接在里面把expiry改成int,另一种就是输出时候改写然后写入文件不然就需要修改了
  22.     time.sleep(50)
  23.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt','w') as cookief:
  24.         cookief.write(json.dumps(browser.get_cookies()))
  25.     browser.close()

  26. def open_chrome(browser):
  27.     browser.delete_all_cookies()
  28.     with open('C:\\Users\\Chysial\\Desktop\\cookies.txt') as cookief:
  29.         cookieslist = json.load(cookief)
  30.         for cookies in cookieslist:
  31.             browser.add_cookie(cookies)
  32. #从主页面baidu一步一步爬到图片里去
  33. def search():
  34.     try:
  35.         input = wait.until(
  36.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
  37.         )
  38.         submit = wait.until(
  39.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#su'))
  40.         )
  41.         input.send_keys("百度图片")
  42.         submit.click()
  43.         wait.until(
  44.             EC.presence_of_element_located((By.CSS_SELECTOR, '#page > a.n'))
  45.         )
  46.         html = browser.page_source
  47.         doc = pq(html)
  48.         items = doc('#1 .t a')
  49.         links = []
  50.         for each in items.items():
  51.             links.append(each.attr('href'))
  52.         links[0]
  53.         browser.get(links[0])
  54.         input = wait.until(
  55.             EC.presence_of_element_located((By.CSS_SELECTOR ,'#kw'))
  56.         )
  57.         input.send_keys("坂井泉水")
  58.         input.send_keys(Keys.ENTER)
  59.         wait.until(
  60.             EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
  61.         )

  62.         scorll_num(3)
  63.         wait.until(
  64.             EC.presence_of_element_located((By.CSS_SELECTOR, '.imgpage .imglist .imgitem'))
  65.         )
  66.         result = get_products()
  67.         return result
  68.     except TimeoutException:
  69.         browser.refresh()
  70.    
  71. #获取姐姐图片的地址
  72. def get_products():
  73.         html = browser.page_source
  74.         doc = pq(html)
  75.         items = doc('.imgpage .imglist .imgitem').items()
  76.         i = 0
  77.         product = {}
  78.         for each in items:
  79.             i += 1
  80.             product[ 'picture'+str(i)] = each.attr('data-objurl')
  81.         return product
  82.    
  83. def scorll_num(num = 10):
  84.     for i in range(num):
  85.         target = browser.find_element_by_id("pageMoreWrap")
  86.         browser.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去
  87.         wait.until(
  88.             EC.presence_of_element_located((By.CSS_SELECTOR, '#pageMoreWrap'))
  89.             )
  90. #保存
  91. def save_class(name,url):
  92.     req = urllib.request.Request(url)
  93.     response = urllib.request.urlopen(req)
  94.     img = response.read()
  95.     if '.jpg' in url:
  96.         with open(name+'.jpg','wb') as f:
  97.                 f.write(img)
  98.     elif '.jpeg' in url:
  99.         with open(name+'.jpeg','wb') as f:
  100.                 f.write(img)
  101.     elif '.png' in url:
  102.         with open(name+'.png','wb') as f:
  103.                 f.write(img)           

  104. #下载
  105. def download_picture(folder='坂井泉水'):
  106.     os.chdir("C:\\Users\\Chysial\\Desktop")
  107.     os.mkdir(folder)
  108.     os.chdir(folder)
  109.     each = search()
  110.     for i in each:
  111.         try:
  112.             save_class(i,each[i])
  113.         except:
  114.             continue
  115.    
  116.    
  117. def main():
  118.     # 运行一次就行了,我这里就不重复了get_cookies(browser)
  119.     open_chrome(browser)
  120.     browser.refresh()
  121.     download_picture(folder='我的泉水姐姐')

  122.    
  123. if __name__ == '__main__':
  124.     main()
复制代码

姐姐.png

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-17 10:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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