首页 > 作文

自动化爬取携程旅游

更新时间:2023-04-07 14:35:47 阅读: 评论:0

1、查找数据源,获取网址

携程旅游网址

2、导入需要的模块

from lenium import webdriverimport timefrom pc import data_boolimport randomfrom lenium.webdriver.common.keys import Keys

3、实例化对象

bool_=data_bool()   #实例化

4、写入需要键入的地区,省份

diqu=['北京','上海','深圳','成都','广州','杭州','三亚','海口',      '乌鲁木齐','拉萨','武汉','南京','西安','南疆','大理','香格里拉',      '西双版纳','五台山','哈尔滨','甘肃','浙江','天津','江苏','福建',      '重庆','湖南','辽宁','山东','内蒙古','安徽','四川','湖北','海南',     '河北','青海','陕西','江西','宁夏','云南','吉林','河南','广西',     '黑龙江','山西','新疆','贵州','西藏','云南'] # 需要键入的地区 全国省份集合

5、设置函数,用异常捕获处理

查看参数数据

def result(driver):    #获取父级元素    parent夏商西周的政治制度=driver.find_element_by_class_name('main_col')    #获取景点等多信息    try:        str_introduce=parent.find_elements_by_css_lector('p.list_product_title')    except:        str_introduce=[]        print('头部获取到空值')    #获取跟团游或地点信息    try:        str_product=parent.find_elements_by_css_lector('p.list_product_tip')    except:        str_product=[]        print('跟团游获取到空值')    #获取列表字段的介绍信息    try:        list_box=parent.find_elements_by_css_lector('list_label_box')        list_box_item=[]        for i in list_box:            list_box_item.append(i.find_elements_by_css_lector('span'))    except:        list_box_item=[]        print('列表获取空值')    #获取供应商信息    try:        list_retail=parent.find_elements_by_css_lector('p.list_product_retail')    except:        list_retail=[]        print('供应商得到空值')    #获取评分信息    try:        str_grade=parent.find_elements_by_css_lector('p.list_change_grade')    except:        str_grade=[]        print('评分获得空值')    #获取出行人数信息    try:        str_number=parent.find_elements_by_css_lector('div.list_change_one')    except:        str_number=[]        print('出游人数获的空值')    #获取点评数量信息    try:        str_remark=parent.find_elements_by_css_lector('div.list_change_two')    except:        str_remark=[]        print('点评数量获得空值')    #获取价格信息    try:        str_price=parent.find_elements_by_css_lector('span.list_sr_price')    except:        str_price=[]        print('价格获取到空值')    #添加主要数据    try:        rank=[]        #以供应商的长度做位循环范围        for i in range(len(list_retail)):             box=[]            #景点信息            try:                introduce=str_introduce[i].text             except:                introduce='无'            #供应商            try:                retail=list_retail[i].text             except:                retail='无'            #评分信息            try:                grade=str_grade[i].text            except:                grade='0分'            #出行人数            try:                number=str_number[i].text            except:                number='0人'            #点评人数            try:                remark=str_remark[i].text            except:                remark='0条'            #价格            try:                price=str_price[i].text            except:                price='¥0元'            try:                #每一个 list_box_item                item=list_box_item[i]                #标签数据添加                for j in item:                    box.append(j.text)                    #添加到rank列表            except:                box=[]            rank.append([introduce,retail,grade,number,remark,price,box])        bool_.MemoryCsv(rank,'携程旅游数据.csv','a')        parent.find_element_by_css_lector('a.down').click()            except:        parent.find_element_by_css_lector('a.down').click()        price('数据丢失了\n')           

6、定义函数抓取第一页

def range_(begin,end,driver):  #三个参数(开始,停止,driver获取的信息)    for i in range(begin,end):          result(driver)  #传入函数        time.sleep(random.randint(20,25))  #随机睡眠20-25秒        print(f'第{i}页')  #打印页数

7、写入点击事件,自动打开网页查找携程

def t(x,x1,x2):    for index,i in enumerate(x[x1:x2]):        driver=webdriver.Chrome()        time.sleep(3)        driver.get('https://vacations.ctrip.com/?startcity=1&salecity=1&cityname=%E5%8C%97%E4%BA%AC')        input_tag=driver.find_element_by_class_name('arch_txt') #查找输入        input_tag.nd_keys(i)        time.sleep(1)        input_tag.nd_keys(Keys.ENTER) #回车        time.sleep(3)        range_(0,35,driver)        driver.clo()        print(f'{i}爬取完毕')        time.sleep(3)

8、导入多线程使用的模块,写入多线程

import threading
t1=threading.Thread(target=t,args=(diqu,11,23))t2=threading.Thread(target=t,args=(diqu,23,31))t3=threading.Thread(target=t,args=(diqu,31,36))
t1.start()t2.start()t3.start()

9、pc是一个py文件

里面是获取头部和存储的代码

import requestsimport requests咏柳诗import chardetimport randomimport csvfrom openpyxl import Workbookfrom pandas import DataFrame,Seriesclass data_bool():教资有效期    def __init__(lf):        pass    def get_html(lf, url):  # 获取html的基本结构        # 获取头部        ur_agent = [                        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"        ]        headers = { 'Ur-Agent': random.choice(ur_agent)}        129师# 获取网址        respon = requests.get(url=url, headers=headers)        # 获取编码        encoding = chardet.detect(respon.content)        # 设置编码        respon.encoding ='utf-8'  # 获取编码值        return respon    # 存储csv格式 只是支持二维列表[[],[]],支持多线程    def MemoryCsv(lf, data: list, fileName: str, mode='w'):        with open(fileName, mode=mode, encoding='utf-8', newline='')as f:            csvfile = csv.writer(f)            # 写入data            for each in data:                csvfile.writerow(each)            print(fileName, "存储成功")    # 存储Excel 格式的函数 不支持多线程    def MemoryExcel(lf, data, fileName):        wb = Workbook()        sheet = wb.active        for eac清明节日记150字h in data:            sheet.append(each)        wb.save(fileName)        print(fileName, '存储成功')    def Memonry_pandas_csv(lf,data:list,fileName,mode='w'):        DataFrame(data).to_csv(fileName,mode=mode,header=Fal,index=Fal)        

本文地址:https://blog.csdn.net/qq_48361772/article/details/109259392

本文发布于:2023-04-07 14:35:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3fb3b190e2adb92972ac9419c5a91240.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:自动化爬取携程旅游.doc

本文 PDF 下载地址:自动化爬取携程旅游.pdf

标签:信息   多线程   函数   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图