山东大学创新项目实训个人工作日志(十)

驴妈妈旅游网站景点门票的爬取
通过解析网站得出,驴妈妈网站并没有传输的json格式的数据,所以采用的方式是直接爬取网页源代码。
爬取的网页地址是:
http://s.lvmama.com/ticket/H9K110000?keyword=‘+keyword+’&tabType=route#list
其中keyword是想要查询的关键词。
爬取该网页获取结果列表,结果包括景点的名称和详细url,紧接着进入到详细页面,解析源码,找到对应信息的标签获取即可。

    def search_spots(self, keyword, city):
        '''

        :param keyword: 关键词
        :param city: 在哪所城市搜索
        :return:
        '''
        Ncity = city.replace('市', '').replace('县', '').replace('省', '')
        '''精确搜索结果'''
        url = 'http://s.lvmama.com/ticket/H9K110000?keyword='+Ncity+keyword+'&tabType=route#list'
        # p = 1;
        try:
            html = self.getHtml(url)
            html = html[:html.find('以下为您推荐')]
            soup = BeautifulSoup(html,"html.parser")
            scenics = soup.find_all('div',{'class':'product-regular clearfix'})
            '''保存的是某一景点的数据'''
            list = {}
            for scenic in scenics:
                slist = {}
                a = scenic.find('a',{'class':'product-picture'})
                result = fuzz.token_sort_ratio(a['title'], keyword)
                if result<=20:
                    continue
                detail = self.getHtml(a['href'])
                detail_soup = BeautifulSoup(detail, "html.parser")
                tables = detail_soup.find_all('table',{'class':'ptable table-full'})
                r = re.compile(r'product_id: "')
                g = ''
                m = r.search(detail)
                '''提取id'''
                if m:
                    endpos = m.end()
                    while detail[endpos] != '\"':
                        g = g + detail[endpos]
                        endpos = endpos + 1
                productid = g
                for table in tables:
                    items = table.find_all('dl',{'class':'ptditem'})
                    i = 0
                    for item in items:
                        if i == 0:
                            i = i+1
                            continue
                        '''价格'''
                        price = item.find('dd',{'class':'pdlvprice'}).find('i').string.replace(' ','').replace('\n','').replace('\t','')
                        '''预定描述'''
                        try:
                            booktime = item.find('dd',{'class':'pdAdvbookingTime'}).string.replace(' ','').replace('\n','').replace('\t','')
                        except:
                            booktime = ''
                        title = item.find('dt',{'class':'pdname'}).text.replace(' ','').replace('\n','').replace('\t','')
                        # isreturn = item.find('dt',{'class':'pdname'}).find('span',{'class':'tagsback'})#是否可退
                        # isget = item.find('dt',{'class':'pdname'}).find('span',{'class':'tagsback'})#是否需要取票
                        try:
                            type = item.find('dt',{'class':'pdname'}).find('a')['key'].replace(' ','').replace('\n','').replace('\t','')
                            data = item.find('dt',{'class':'pdname'}).find('a')['data'].replace(' ','').replace('\n','').replace('\t','')
                        except Exception as ex:
                            type = ''
                            data = ''

                        detail_url = 'http://ticket.lvmama.com/scenic_front/scenic/asyncLoadingTicketDetail.do?suppGoodsId='+data+'&branchType=&productId='+productid+'&bizCategoryId=11&key='
                        moreInfo = self.getHtml(detail_url)
                        # print(moreInfo)
                        moresoup = BeautifulSoup(moreInfo,'html.parser')
                        h4 = moresoup.find_all('li')
                        dis = ''
                        isreturn = ''
                        for h in h4:
                            # lis = h.find_all('li')
                            # for li in lis:
                            if h.text.find('退票规则')>=0:
                                isreturn = h.find('i').text
                            if h.text.find('有效期限')>=0:
                                usetime = h.text.replace('有效期限','')
                        dis = moresoup.text.replace('收起','')
                        # print(detail_url)
                        # print(title)
                        '''合并'''
                        slist.setdefault(type,[])
                        slist[type].append({'name':title,'type':type,'price':price,'url':a['href'],'buy':'','from':'驴妈妈','isReturnable':isreturn,
                                    'bookTime':booktime,'outTime':'','useTime':usetime,'discription':dis})
                list[a['title']] = slist
            # print(list)
            self.spotsInfo = list


        except Exception as e:
            print(e)
        self.done = True

通过上述方法,就可以实现通过关键词和城市查询出景点门票的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值