驴妈妈景点爬取

本文介绍了如何使用BeautifulSoup4和requests结合selenium爬取驴妈妈网站上的景点信息。首先获取所有城市名,然后构造每个城市的链接,通过点击操作获取完整地点列表。接着,多进程处理每个城市的景点页面,从第二页开始爬取。解析函数根据需求返回最大页数或爬取景点详情。最后,展示了获取最大页数的实现方法。
摘要由CSDN通过智能技术生成

驴妈妈景点爬取

这次用BeautifulSoup4和requests来爬取驴妈妈上的景点信息。
主要用到的模块:
- requests
- BeautifulSoup
- selenium


爬虫思路

1、获取城市名并构造所有城市地点的链接 get_all_cities_url()
3、爬取每个地点的第一页并获取最大页数 parse_one_page( (url, choice=0) ),
4、构造每个城市从第二页开始每一页的链接 generate_url(current_url, pagenum)
5、访问从第二页开始每一页链接爬取景点 parse_one_page( (url, choice=1) ) 多进程

我找到的网站链接是http://ticket.lvmama.com/
对于一个地方的景点链接http://s.lvmama.com/ticket/?keyword=上海&k=0#list
可以看到是需要在第一个链接的搜索框中输入地点名的,所以需要首先去获取所有地点名。
这里写图片描述

这个页面貌似直接request请求获取不到,所以我用了phantomjs来模拟浏览器渲染来获取
,在测试过程中发现需要点击ABCD这个tab之后地点才全部出现。
所以对于这个页面需要做的就是1、点击上海展开下方的列表。2、点击ABCD tab来使所有地点加载到页面上。
以下放上部分代码:

#简单的下载函数
def downloader(url):
    retry = 0
    while retry < RETRY_TIMES:
        time.sleep(DOWNLOAD_DELAY)
        USER_DEFINE_HEADER['User-Agent'] = random.choice(UA_LIST)
        try:
            response = requests.get(url=url, headers=USER_DEFINE_HEADER, timeout=10)
            if response.status_code in RETRY_CODE_LIST:
                retry += 1
                log("Error in downloading, retry time %d, status code %d" % (retry, response.status_code))
            else:
                return response.text
        except RequestException:
            retry += 1
            log("Error in downloading, retry time %d, request exception" % retry)
            pass
    return None

#获得所有城市名的具体函数
def get_all_cities_url():
    browser = webdriver.PhantomJS()
    start_url = "http://ticket.lvmama.com/"
    browser.get(start_url)
    browser.find_element_by_xpath('/ht
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值