文中的文本及图片来自互联网,仅作学习培训、沟通交流应用,不具备一切商业行为,著作权归创作者全部,如有什么问题请立即在线留言以作解决

一 、序言

世界这么大,我想去看看 。
要不阅读 ,要不度假旅游 ,人体和内心务必有一个走在路上 。
想来大伙儿内心都憧憬度假旅游,那麼度假旅游中的日程安排和地域热门景点有什么呢?
很有可能都必须在网络上去找游玩攻略,今日就带大伙儿收集旅行网站的旅游景点数据。

二 、课程内容闪光点

  1. 结构化分析网页页面特性
  2. 结构型的数据分析
  3. csv数据储存

三、常用到得库

import csv
import requests
import parsel
from concurrent.futures import ProcessPoolExecutor
import multiprocessing

 

四、自然环境配备

python 3.6
pycharm
requests
parsel
csv

五 、网络爬虫实例的一般完成流程:

1.找数据所属的URL详细地址
2.推送互联网要求
3.数据的分析(大家必须的数据)
4.数据的储存

六、寻找数据所属处

lock = multiprocessing.Lock()  # 建立过程锁目标

def send_request(url):
    """要求数据"""
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
    html_data = requests.get(url=url, headers=headers).text
    return html_data

 

七、详细编码:

def parse_data(html_data):
    selector = parsel.Selector(html_data)
    lis = selector.xpath('//ul[@class="plcCitylist"]/li')

    for li in lis:
        travel_place = li.xpath('.//h3/a/text()').get()  # 目的地
        travel_people = li.xpath('.//p[@class="beento"]/text()').get()  # 来过的总数

        travel_hot = li.xpath('.//p[@class="pois"]/a/text()').getall()  # 热门景点
        travel_hot = [hot.strip() for hot in travel_hot]
        travel_hot = '	、'.join(travel_hot)

        travel_url = li.xpath('.//h3/a/@href').get()  # 目的地宝贝详情url
        travel_imgUrl = li.xpath('./p/a/img/@src').get()  # 图片url
        print(travel_place, travel_people, travel_hot, travel_url, travel_imgUrl, sep=' | ')

        yield travel_place, travel_people, travel_hot, travel_url, travel_imgUrl

def save_data(data_generator):
    with open('穷游网.csv', mode='a', encoding='utf-8', newline='') as f:
        csv_write = csv.writer(f)
        for data in data_generator:
            lock.acquire()  # 上锁
            csv_write.writerow(data)
            lock.release()  # 释放出来锁

def main(url):
    html_data = send_request(url)
    parse_result = parse_data(html_data)
    save_data(parse_result)


if __name__ == '__main__':
    # main('https://place.qyer.com/china/citylist-0-0-1')
    with ProcessPoolExecutor(max_workers=13) as executor:
        for page in range(1, 172):
            url = f'https://place.qyer.com/china/citylist-0-0-{page}/'
            executor.submit(main, url)

 

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归去快排wWw.seogUrublog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系qq❉61910465