爬取淘宝商品信息

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re,json
from pyquery import PyQuery as pq
driver = webdriver.Ie()
wait=WebDriverWait(driver,20,0.2)
url = "http://taobao.com"
def search():
    try:
        driver.get(url)
        # 判断页面是否加载成功
        input=wait.until(EC.presence_of_element_located((By.ID,"q")))
        input.send_keys("美食")
        submit=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#J_TSearchForm > div.search-button > button")))
        submit.click()
        #总的页数
        total=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.total")))

        get_products()

        return total.text
    except TimeoutError:
        return search()

def next_page(page_number):
    try:
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input")))  #输入框
        submit = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit"))) #确定
        input.clear()
        input.send_keys(page_number)
        submit.click()
        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)))

        get_products()

    except TimeoutError:
        next_page(page_number)

def get_products():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-itemlist .items .item")))
    html=driver.page_source
    #进行解析
    doc=pq(html)
    items=doc('#mainsrp-itemlist .items .item').items()
    #字典
    for item in items:
        product={
            'image':item.find('.pic .img').attr('src'),#获取SRC属性
            'price':item.find('.price').text(),#商品价格
            'deal':item.find('.deal-cnt').text()[:-3],#成交量  去掉付款人三个字
            'title':item.find(".title").text(),#商品标题
            'shop':item.find(".shop").text(),#店名
            'location':item.find(".location").text()  #地址

        }
        print(product)
        save_data(product)

def save_data(result):
    with open('淘宝商品信息','a+',encoding="utf-8")as f:
        f.write(json.dumps(result,ensure_ascii=False)+'\n')
        f.close()



def main():
    total=search()
    #只打印数字页数,强制转换为int类型
    total=int(re.compile('(\d+)').search(total).group(1))
    print(total)
    for i in range(2,total+1):
        next_page(i)
    driver.quit()


if __name__ == '__main__':
    main()

 

转载于:https://www.cnblogs.com/yaoliping/p/9630357.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬取淘宝商品信息一般分为以下步骤: 1. 打开淘宝搜索页面,输入关键词,获取搜索结果页面源代码。 2. 解析搜索结果页面,获取每个商品的链接地址。 3. 访问每个商品链接地址,获取商品详情页面源代码。 4. 解析商品详情页面,获取商品的基本信息和价格信息等。 5. 保存商品信息至本地文件或数据库。 下面是一个基于Python爬取淘宝商品信息的代码示例: ```python import requests from bs4 import BeautifulSoup keyword = '手机' # 搜索关键词 url = f'https://s.taobao.com/search?q={keyword}' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 发送请求 response = requests.get(url, headers=headers) # 解析搜索结果页面 soup = BeautifulSoup(response.text, 'html.parser') items = soup.find_all('div', class_='item J_MouserOnverReq ') for item in items: # 获取每个商品的链接地址 link = 'https:' + item.find('a', class_='J_ClickStat')['href'] # 访问商品链接地址 details_response = requests.get(link, headers=headers) # 解析商品详情页面 details_soup = BeautifulSoup(details_response.text, 'html.parser') # 获取商品的基本信息和价格信息等 title = details_soup.find('h3', class_='tb-main-title').text.strip() price = details_soup.find('span', class_='tb-rmb-num').text print(title, price) ``` 需要注意的是,淘宝对爬虫有一定的反爬虫机制,为了避免被封IP,可以在发送请求时添加一些随机的等待时间,或者使用代理IP。另外,爬取淘宝商品信息也需要遵守相关法律法规,不得侵犯商家和消费者的权益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值