动态网页爬取信息

瓜子网动态爬取详情页

案例爬取的是瓜子网中热门的奥迪汽车

  • 1:保存函数
# 导包
import os
from openpyxl import Workbook
import csv
# 自定义保存得类
class Saving(object):
    def savetoCsv(self,datalist):
        with open('豆瓣top250.csv','a',encoding='utf-8',newline='')as csvfile:
            write = csv.writer(csvfile)
            for each in datalist:
                write.writerow(each)
        # print('储存完成')

  • 2:提取数据
# 导包
from selenium import webdriver
import time
from saving import Saving

browser=webdriver.Chrome()

# url='https://www.guazi.com/www/audi/o1/'
def gethref(url):
    # 打开网页
    browser.get(url)
    # 每次打开主网页休眠两秒
    time.sleep(2)
    # 最大化我们的界面
    # browser.maximize_window()
    #下拉界面,for几次就是几次
    for i in range(1):
         time.sleep(2)
         # 每次下拉的界面最好是跟自己的电脑屏幕匹配
         # 查看方式是截图,看自己电脑的盖度
         browser.execute_script('window.scrollBy(0,600)', '')
    hreflist=[]
    # 查找父元素
    parent=browser.find_element_by_class_name("carlist")
    # 寻找每一个li 容器
    lis=parent.find_elements_by_tag_name('li')
    for each in lis:
        # 查找每一本详情页面的超链接
        href=each.find_element_by_tag_name('a').get_attribute('href')
        hreflist.append(href)
    return hreflist
def getdata(hreflist):
    # 重新一次打开详情页的网页
    for i,each  in enumerate(hreflist):
        datalist = []
        # 记得休眠
        time.sleep(2)
        # 打开网页
        browser.get(each)
        # 输出地市一下当前为详情页的第几页
        print('爬取详情页的第',(i+1),'页')
        time.sleep(2)
        money=browser.find_element_by_class_name("pricestype").text # 车的价格
        monet_newcar=browser.find_element_by_class_name("newcarprice").text# 原价
        year=browser.find_elements_by_class_name("one")[1].find_element_by_tag_name('div').text #上牌时间
        mileage = browser.find_elements_by_class_name("two")[1].find_element_by_tag_name('div').text #车表里程
        address = browser.find_elements_by_class_name("three")[2].find_element_by_tag_name('div').text  #上牌地
        country_emissions = browser.find_element_by_class_name("four").find_element_by_tag_name('div').text  #按照国家排放量标准划分
        bianxiang = browser.find_element_by_class_name("five").find_element_by_tag_name('div').text  # 变箱型号
        emissions = browser.find_element_by_class_name("six").find_element_by_tag_name('div').text  #排放量
        guohu_num = browser.find_element_by_class_name("seven").find_element_by_tag_name('div').text  #过户数
        look_address = browser.find_element_by_class_name("eight").find_element_by_tag_name('div').text  # 看车地点
        nianjian_year = browser.find_element_by_class_name("nine").find_element_by_tag_name('div').text  # 年检到期
        qiangxian_year = browser.find_element_by_class_name("ten").find_element_by_tag_name('div').text  #  强险
        shangye_year = browser.find_elements_by_class_name("last")[1].find_element_by_tag_name('div').text  # 商业险
        parent1=browser.find_element_by_class_name("detailcontent")
        parent2=parent1.find_elements_by_tag_name('table')[0]
        model=parent2.find_elements_by_tag_name('tr')[1].find_elements_by_tag_name('td')[1].text# 车型号
        vendor = parent2.find_elements_by_tag_name('tr')[2].find_elements_by_tag_name('td')[1].text# 厂商
        level=parent2.find_elements_by_tag_name('tr')[3].find_elements_by_tag_name('td')[1].text# 级别
        engine=parent2.find_elements_by_tag_name('tr')[4].find_elements_by_tag_name('td')[1].text# 发动机
        datalist.append([money,monet_newcar,year,mileage,address,country_emissions,bianxiang,emissions,guohu_num,look_address,
                         nianjian_year,qiangxian_year,shangye_year,model,vendor,level,engine])
        # 没提取一整条信息,就保存一次,防止被反扒之后以前的信息没有的,不做无用功
        save(datalist)
        print('保存详情页的第', (i + 1), '页的数据成功')
# 自定义 保存对象
def save(datalist):
    # 对象实例化
    mysave=Saving()
    mysave.savetoCsv(datalist)
# 自定义主函数
def main(start_num,end_num):
    # 头标题要只保存一次,所以再最上面保存一次,调用一次保存函数保存一下
    headdata=[]
    headdata.append(['价格','原价','上牌时间','车表里程','上牌地','排放量等级','变箱型号','排放量',
                     '过户数','看车地点','年检到期','强险','商业险','车型号','厂商','级别','发动机'])
    save(headdata)
    # 采用的是网页网址中页数的方式爬取多页
    for i in range(start_num,end_num):
        url = 'https://www.guazi.com/www/audi/o'+str(i)+'/#bread'
        time.sleep(3)
        print('开始爬取第',i,'页')
        hreflist=gethref(url)
        getdata(hreflist)
# 判断一下,防止被调用错误,多次调用
if __name__=='__main__':
    main(21,51)

猜你喜欢

转载自blog.csdn.net/qq_43389959/article/details/83341130