使用selenium爬取淘宝商品

爬取的页面是:“https://s.taobao.com/search?q=手机”,这个是淘宝搜索手机时候的网址。
使用selenium爬取淘宝商品_第1张图片
爬取的思路:使用selenium来模拟登陆淘宝,然后爬取这一页中商品的一些信息;爬取完以后,找到输入页面的输入框,依次输入下一页的页码,比如刚刚爬的是第一页,就输入2,再点击确定按钮,以此类推,就可以实现翻页的功能。其中需要多次使用WebDriverWait,来保证需要爬取的内容出现,再进行爬取。

需要使用的库和初始化:

from selenium import webdriver
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
import time
import pandas as pd
import csv

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10) #设置一个延时等待的时间,确保节点已经加载出来
url = 'https://s.taobao.com/search?q=手机'
driver.get(url)

def main():
    for i in range(1, 101):
        parse_page(i)

if __name__ == '__main__':
    main()

下面是完成点击翻页的功能,使得可以爬取多页信息,具体的含义写在代码中的。

def parse_page(i):
    print("正在爬取第{}页".format(i))
    #找到输入页码框,并等待它的出现
    input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager div.form > input')))
    #找到输入页码框后面的确定键,并可以点击
    submit = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager div.form > span.btn.J_Submit'))
        )
    html =driver.page_source   
    input.clear()   #将页码输入框清空
    input.send_keys(i)  #输入页码
    submit.click()   #点击确定
    get_products(html)   #爬取详情页
    time.sleep(1)

下面的是使用pyquery来解析页面的,提取要爬取的信息,然后通过转换成DataFrame数据类型,写入csv文件中。


def get_products(html):
    res = []
    doc = pq(html)
    items = doc('#mainsrp-itemlist .items .item').items()
    for item in items:
        pic = item.find('.pic .img').attr('data-src')
        price = item.find('.price').text()
        buy = item.find('.deal-cnt').text()
        title = item.find('.title').text()
        shop = item.find('.shop').text()
        place = item.find('.location').text()
        res.append([pic, price, buy, title, shop, place])
        time.sleep(0.1)
    shouji = pd.DataFrame(res)
    shouji.to_csv("shouji2.csv", mode="a",header = False)
    print("已存储一页数据")
    time.sleep(1)
    
def write_to_csv(res):
    with open("shouji.csv","a+") as xl:
        writer = csv.writer(xl)
        writer.writerow(res)  

不过这个爬取淘宝有一些问题,第一就是登陆需要自己扫码登陆,第二就是必须使用代理,不然会被识别出是爬虫。试过很多次,不管是这个方法还是别的方法,爬完第十八页的时候就会就会被打断。等我学习完构建代理池的时候,再来试试吧。
本来还录了一个演示视频,这里放不了就算啦吧。

你可能感兴趣的:(爬虫)