携程旅游网址
from lenium import webdriverimport timefrom pc import data_boolimport randomfrom lenium.webdriver.common.keys import Keys
bool_=data_bool() #实例化
diqu=['北京','上海','深圳','成都','广州','杭州','三亚','海口', '乌鲁木齐','拉萨','武汉','南京','西安','南疆','大理','香格里拉', '西双版纳','五台山','哈尔滨','甘肃','浙江','天津','江苏','福建', '重庆','湖南','辽宁','山东','内蒙古','安徽','四川','湖北','海南', '河北','青海','陕西','江西','宁夏','云南','吉林','河南','广西', '黑龙江','山西','新疆','贵州','西藏','云南'] # 需要键入的地区 全国省份集合
查看参数数据
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')
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}页') #打印页数
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)
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()
里面是获取头部和存储的代码
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 条评论) |