穷游网 游记 爬虫

最近需要一些东南亚国家的照片,于是写了一个穷游网游记的爬虫,穷游网用了ajax请求,简单的request很难实现拿到图片的url,于是用了selenium进行爬取。

from selenium import webdriver
import time,re,requests,os
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options

def get_img_in_page(page_url='https://bbs.qyer.com/thread-3502079-1.html',wait_time=2):
    '''
    从详情页爬取图片,返回图片的url列表
    :param page_url:详情页的url
    :param wait_time:等待网页加载的时间
    :return:图片的url列表
    '''
    #创建浏览器的隐式启动,也可以直接用webdriver.Chrome()显式启动
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    path = 'D:\ProgramData\Anaconda3\envs\spider\Scripts\chromedriver.exe'  #这个地方要改正自己电脑上安装chromedriver时的存放位置
    browser = webdriver.Chrome(executable_path=path, options=chrome_options)  # 选择谷歌浏览器

    # browser = webdriver.Chrome()
    browser.get(page_url)
    time.sleep(wait_time)  #等待1s,等网页加载完成
    soup=BeautifulSoup(browser.page_source,'lxml')
    browser.close()  #关闭网页
    b_list=soup.select('.flo_content')  #使用bs4,根据class查找内容位置
    img_list=re.findall('data-original="(.*?)"',str(b_list))  #正则表达式,找原图的url
    img_url_list=[]
    for i in img_list:
        img_url='https:'+i
        img_url_list.append(img_url)
    return img_url_list


def get_page_list(keyword='东南亚',page='1'):
    '''
    根据目的地关键词检索相关帖子,返回每个帖子对应的详情页url列表
    :param keyword:搜索关键词
    :param page:第几页(穷游网一般最大是100)
    :return:详情页的url列表
    '''
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
        'Connection':'close'
}
    url_0='https://search.qyer.com/newBbs'
    params={
        'ajaxID': '5be149fd7b20e5c1476b7117',
        'keyword': keyword,
        'tab': 'bbs',
        'page': page,
        'post_time_mode': '1',
        'post_time_start':'',
        'post_time_end':'',
        'post_order': '1',
        'post_type': '0'
    }
    response=requests.get(url=url_0,headers=headers,params=params)  #直接用request根据搜索关键字对网页发出请求
    html_data=response.json()
    detail_page_list=[]
    for i in html_data['data']['data']['list']:
        detail_page_url='https:'+i['t_url']
        detail_page_list.append(detail_page_url)
    return detail_page_list

if __name__ == '__main__':
    keyword_list=['缅甸','泰国','柬埔寨','老挝','越南','菲律宾','马来西亚','文莱','印度尼西亚','东帝汶']
    for keyword in keyword_list:
        page=101
        name_num = 0
        for page_num in range(1,page):
            try:
                page_num_=str(page_num)
                detail_page_list=get_page_list(keyword=keyword,page=page_num_)
                save_root='./img/'+keyword+'/'  #存储文件夹

                if not os.path.exists(save_root):
                    os.mkdir(save_root)
                detail_num=0
                # print('-----------------',page_num)
                # print(detail_page_list)
                for detail_url in detail_page_list:
                    detail_num+=1
                    try:
                        img_url_list=get_img_in_page(page_url=detail_url,wait_time=1)
                        img_num=0
                        for img_url in img_url_list:
                            try:
                                img_num+=1
                                name_num+=1
                                img_name=save_root+keyword+'_'+str(name_num)+'.jpg'
                                img_data = requests.get(img_url).content
                                with open(img_name, 'wb') as fp:
                                    fp.write(img_data)
                                print("[%s 第%s页] [第%s篇游记] [第%s/%s张图] [存储地址:%s]"%(keyword,str(page_num),detail_num,img_num,len(img_url_list),img_name))
                                time.sleep(0.1)
                            except:
                                continue
                    except:
                        continue
            except:
                continue



您好!要使用Python编写爬虫来获取携程游记的信息,您可以按照以下步骤进行操作: 1. 导入所需的库:您可以使用`requests`库来发送HTTP请求,使用`BeautifulSoup`库来解析HTML页面。 2. 发送HTTP请求并获取页面内容:使用`requests`库发送GET请求,获取携程游记的页面内容。 3. 解析HTML页面:使用`BeautifulSoup`库解析页面内容,提取出游记的相关信息。 4. 提取游记信息:根据页面的HTML结构,使用`BeautifulSoup`库提取游记的标题、作者、发布时间、内容等信息。 5. 存储游记信息:您可以选择将提取到的游记信息存储到文件或数据库中,以便后续使用或分析。 以下是一个简单的示例代码,以帮助您开始编写爬虫: ```python import requests from bs4 import BeautifulSoup # 发送HTTP请求并获取页面内容 url = 'https://you.ctrip.com/travels' response = requests.get(url) html_content = response.text # 解析HTML页面 soup = BeautifulSoup(html_content, 'html.parser') # 提取游记信息 travel_list = soup.find_all('div', class_='journals_list') for travel in travel_list: title = travel.find('h2').text author = travel.find('span', class_='username').text publish_time = travel.find('span', class_='time').text content = travel.find('div', class_='ctd_content').text # 打印游记信息 print('标题:', title) print('作者:', author) print('发布时间:', publish_time) print('内容:', content) print('---') ``` 请注意,这只是一个简单的示例代码,具体的网页结构可能会有所变化,您可能需要根据实际情况做一些调整。此外,爬取网页内容时请尊重网站的规则和条款,并遵循合适的爬取频率,以免对网站造成过大的负担。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值