赞
踩
这次用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。