Python打造自动化爬取携程旅游,太强了这个工具
1、查找数据源 , 获取网址携程旅游网址
2、导入需要的模块from selenium import webdriverimport timefrom pc import data_boolimport randomfrom selenium.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_selector('p.list_product_title')except:str_introduce=[]print('头部获取到空值')#获取跟团游或地点信息try:str_product=parent.find_elements_by_css_selector('p.list_product_tip')except:str_product=[]print('跟团游获取到空值')#获取列表字段的介绍信息try:list_box=parent.find_elements_by_css_selector('list_label_box')list_box_item=[]for i in list_box:list_box_item.append(i.find_elements_by_css_selector('span'))except:list_box_item=[]print('列表获取空值')#获取供应商信息try:list_retail=parent.find_elements_by_css_selector('p.list_product_retail')except:list_retail=[]print('供应商得到空值')#获取评分信息try:str_grade=parent.find_elements_by_css_selector('p.list_change_grade')except:str_grade=[]print('评分获得空值')#获取出行人数信息try:str_number=parent.find_elements_by_css_selector('div.list_change_one')except:str_number=[]print('出游人数获的空值')#获取点评数量信息try:str_remark=parent.find_elements_by_css_selector('div.list_change_two')except:str_remark=[]print('点评数量获得空值')#获取价格信息try:str_price=parent.find_elements_by_css_selector('span.list_sr_price')except:str_price=[]print('价格获取到空值')#添加主要数据try:rank=[]#以供应商的长度做位循环范围for i in range(len(list_retail)):box=[]#景点信息try:introduce=str_introduce[i].textexcept:introduce='无'#供应商try:retail=list_retail[i].textexcept:retail='无'#评分信息try:grade=str_grade[i].textexcept:grade='0分'#出行人数try:number=str_number[i].textexcept:number='0人'#点评人数try:remark=str_remark[i].textexcept:remark='0条'#价格try:price=str_price[i].textexcept:price='¥0元'try:#每一个 list_box_itemitem=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_selector('a.down').click()except:parent.find_element_by_css_selector('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(';salecity=1 --tt-darkmode-color: #979797;">8、导入多线程使用的模块 , 写入多线程【Python打造自动化爬取携程旅游,太强了这个工具】
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 requestsimport chardetimport randomimport csvfrom openpyxl import Workbookfrom pandas import DataFrame,Seriesclass data_bool():def __init__(self):passdef get_html(self, url):# 获取html的基本结构# 获取头部user_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 = {'User-Agent': random.choice(user_agent)}# 获取网址response = requests.get(url=url, headers=headers)# 获取编码encoding = chardet.detect(response.content)# 设置编码response.encoding ='utf-8'# 获取编码值return response# 存储csv格式 只是支持二维列表[[],[]],支持多线程def MemoryCsv(self, data: list, fileName: str, mode='w'):with open(fileName, mode=mode, encoding='utf-8', newline='')as f:csvfile = csv.writer(f)# 写入datafor each in data:csvfile.writerow(each)print(fileName, "存储成功")# 存储Excel 格式的函数 不支持多线程def MemoryExcel(self, data, fileName):wb = Workbook()sheet = wb.activefor each in data:sheet.append(each)wb.save(fileName)print(fileName, '存储成功')def Memonry_pandas_csv(self,data:list,fileName,mode='w'):DataFrame(data).to_csv(fileName,mode=mode,header=False,index=False)
- 注册|阿里申请注册“爆改吧!小店”商标,打造线下特色实体小店
- 中国|中国软件国际与深圳市政府达成战略合作协议 助力打造“创新之都“
- 流量|蔡林记总经理张绪明:电商、外卖弥补实体店损失,将打造私域流量
- 广州国际创新节|大咖谈新基建:打造新经济时代的数字引擎
- 搜违禁词将出现公益宣导页 看“绿网计划”如何打造安全网
- 搭档|台湾、东北小伙搭档 打造用工领域“滴滴打车”
- 打造|广西移动5G为打造“数字丝绸之路”提档加速
- 检测|机器视觉检测解决方案商“鼎纳自动化”完成B轮亿元融资
- 融资|鼎纳自动化完成B轮亿元融资
- 深度|专为年轻人打造的高端机 Redmi K30S至尊纪念版深度实测