当前位置:   article > 正文

驴妈妈景点爬取

驴妈妈景点爬取

驴妈妈景点爬取

这次用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/616455
推荐阅读
相关标签
  

闽ICP备14008679号