使用selenium模拟爬取京东

7 篇文章 0 订阅
2 篇文章 0 订阅

       现在,许多网站都存在着各式各样的反爬虫技术,但是python中有这么一个库,不敢说能爬取100%的网站,但是至少能爬取95%以上的网站,这个强大的库就是selenium,使用这个库能够完全模拟浏览器的各种功能,虽然相较于requests或者urllib速度较慢一点,但是它也有它自己的优势,使用这个库开启无头浏览器模式的时候,它就是一个浏览器,所以几乎所有的反爬虫技术都对它无用,今天分享的是使用selenium模拟搜索一种商品并爬取一些商品的简单信息。

首先 导入一些我们需要的库:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from pyquery.pyquery import PyQuery as pq
import re

这些我们在selenium的官方网站上都能找到用法。使用selenium模拟搜索就是先找到搜索框输入想要搜索的内容,然后点击搜索按钮,并不需要太多的操作,这个如果使用requests或者urllib的话就需要发送一些参数了,但是selenium则完全不用,我们平常怎么使用浏览器操作,就写什么样的代码就ok了,下面input就是输入框,submit就是输入按钮:

browser.get("https://www.jd.com")
        input=WebDriverWait(browser,10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR,"#key"))
        )
        submint=WebDriverWait(browser,10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR,"#search > div > div.form > button > i"))
        )
        input.send_keys("双肩背包")
        submint.click()

本次爬虫的详细代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from pyquery.pyquery import PyQuery as pq
import re


browser=webdriver.Chrome()   #模拟的浏览器,这里使用的是谷歌浏览器,也没有开启无头模式

wait=WebDriverWait(browser,10)   #设置等待时长
#实现查询功能
def search():
    try:
        browser.get("https://www.jd.com")
         # 找到输入框
        input=WebDriverWait(browser,10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR,"#key"))
        )
           #找到搜索按钮
        submint=WebDriverWait(browser,10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR,"#search > div > div.form > button > i"))
        )
        #模拟输入并点击
        input.send_keys("双肩背包")
        submint.click()
        #获得结果总共的页数
        total=WebDriverWait(browser,10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR,"#J_bottomPage > span.p-skip > em:nth-child(1) > b"))
        )
        #调用的products函数
        products()
        return total.text
    except TimeoutException:
        return search()
#模拟翻页
def next_page(pagenumber):
    try:
        #页码输入框
        input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#J_bottomPage > span.p-skip > input")))
        products()
        submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#J_bottomPage > span.p-skip > a")))
        input.clear()
        #输入页码并点击翻页
        input.send_keys(pagenumber)
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#J_bottomPage > span.p-num > a.curr"),str(pagenumber)))

    except TimeoutException:
        next_page(pagenumber)
#获取商品信息
def products():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#J_goodsList .gl-item")))
    html=browser.page_source
    doc=pq(html)
    items=doc("#J_goodsList .gl-item").items()
    for item in items:
        product={
            # "price":item.find('.p-price').text(),
            # "title":item.find('.p-name').text(),
            "image":item.find('[target]').attr('src')
            # "mall":item.find(".p-shop").text()
        }
        print(product)

def main():
    total=int(search())

    for i in range(2,total+1):
        next_page(i)

if __name__=="__main__":
    main()

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是使用Selenium完成京东商品的步骤: 1. 安装Selenium库 ``` pip install selenium ``` 2. 下载Chrome浏览器驱动 Selenium需要浏览器驱动来控制浏览器。这里以Chrome浏览器为例,下载对应版本的驱动:https://sites.google.com/a/chromium.org/chromedriver/downloads 3. 编写虫代码 以下是一个简单的例子,可以京东商品的名称、价格和链接: ```python from selenium import webdriver # 创建Chrome浏览器驱动对象 driver = webdriver.Chrome('chromedriver.exe') # 打开京东首页 driver.get('https://www.jd.com/') # 在搜索框中输入关键词并搜索 input_elem = driver.find_element_by_id('key') input_elem.send_keys('手机') search_btn = driver.find_element_by_class_name('button') search_btn.click() # 等待搜索结果页面加载完成 driver.implicitly_wait(10) # 获搜索结果中的商品列表 product_list = driver.find_elements_by_css_selector('.gl-item') # 遍历商品列表,提名称、价格、链接等信息 for product in product_list: name = product.find_element_by_css_selector('.p-name a').text price = product.find_element_by_css_selector('.p-price strong i').text link = product.find_element_by_css_selector('.p-name a').get_attribute('href') print(name, price, link) # 关闭浏览器 driver.quit() ``` 在上面的代码中,使用`webdriver.Chrome`创建Chrome浏览器驱动对象,并使用`get`方法打开京东首页。然后,使用`find_element_by_id`和`find_element_by_class_name`等方法定位搜索框和搜索按钮,并模拟用户输入关键词和点击搜索按钮。接着,使用`implicitly_wait`方法等待搜索结果页面加载完成。最后,使用`find_elements_by_css_selector`方法定位商品列表,遍历列表,提商品的名称、价格和链接等信息,并打印输出。最后,调用`quit`方法关闭浏览器。 需要注意的是,Selenium是一个自动化测试工具,使用时要注意不要频繁请求,以免被网站封禁IP。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值