需要的模块和组件
因为淘宝的Ajax比较复杂,所以这里使用Selenium来模拟浏览器的操作,抓取淘宝商品的信息,并将结果保存到MongoDB中。(我也不清楚为什么复杂,但是可以学一些新东西也可以把。)
Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。
要用到Chrome就需要用到ChromeDriver,这是一个浏览器驱动程序,用来启动Chrome等浏览器。
分析网站
可以看到我们输入链接https://s.taobao.com/search?q=好吃的,就可以进入指定的搜索地址。你直接搜东西在复制淘宝会隐藏,不会直观的显示出来,所以这样更美观一些。
然后就可以用Selenium进行抓取了,下面就是Selenium的一些用法。
from selenium import webdriver #导入浏览器驱动
from selenium.webdriver.common.by import By #这是一些方法,下面会细说
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Chrome() #使用 Chrome浏览器爬取
try:
browser.get('https://www.baidu.com') #给浏览器传入url
input = browser.find_element_by_id('kw') #找到百度的输入框
input.send_keys('Python') #传入keys值为python
input.send_keys(Keys.ENTER) #找到确认键
wait = WebDriverWait(browser, 10) #设置等待的时间
wait.until(EC.presence_of_element_located((By.ID, 'content_left'))) #等待确认已经进入了要进入的页面
print(browser.current_url) #输出输入python后的url
print('_______________________')
print(browser.get_cookies()) #输出cookies
print('_______________________')
print(browser.page_source) #输出整个原文html代码
finally:
browser.close() #最后关闭browser
上面测试了一下可用Selenium模拟搜索关键字并进行搜索。
做个笔记:
这句代码的意思是选择选择器。
检查,找到输入框,右键选择复制Copy selector,就将’kw’这个选择器选择出来,然后进行赋值,再选择确认键。下面的淘宝输入框也是一样的。
正式开始爬取
import pymongo
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 pyquery import PyQuery as pq
from config import *
from urllib.parse import quote
browser = webdriver.Chrome() #指定浏览器
wait