萌新的Python学习日记 - 爬虫无影 - 添加headers抓取动态网页内容:TripAdvisor(上)

博客第二天

测试页面:TripAdvisor:https://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html#FILTERED_LIST,

目的:爬取第一区类的title,img,cate,


工程内容:Python3.5,jupyter notebook

工具包:requests, BeautifulSoup,time,pandas

代码(30页):

import time

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
url = 'https://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html'   #   测试页面
urls = ['https://www.tripadvisor.cn/Attractions-g60763-Activities-oa{}-New_York_City_New_York.html#FILTERED_LIST'.format(str(i)) for i in range(0,930,30)]   #爬虫所需页面
info = []   # 用于存储信息
def get_pages(url,data=None):   #定义函数抽取元素
    time.sleep(2)
    web = requests.get(url)
    soup = bs(web.text,'lxml')
    titles = soup.select('div.listing_title > a[target="_blank"]')             #注:对于非纯Python语句,注意不能多空格、单双引号等区别
    imgs = soup.select('img[width="180"]')
    cates = soup.select('div.p13n_reasoning_v2')
    for title,img,cate in zip(titles,imgs,cates):
        data = {
            'img' : img.get('src'),
            'title' : title.get_text(),
            'cate' : list(cate.stripped_strings),
        }
        info.append(data)
#         print(data)   #用于测试
# print(urls)    #用于测试
for single in urls:     #调用函数
    get_pages(single)


df = pd.DataFrame(info)
df.to_csv('14练习结果.csv')  #输出到文件

print结果(部分):


csv截图(部分):


内容:爬取了1-30页,共731条数据(注:这个数字显非常随机,原因是此次代码只抓取了页面中非聚合的对象,而此类对象在每页中的出现是不规律的,另外,也不排除后面的页面编排规则有些许改变,此处没有花时间做仔细校对),图中获取的img并非真实链接(末尾都是img2/x.gif,被加密保护了),时间有限,这个问题留到以后解决。

error :无

总结:

    1. print及csv各项的顺序于data中设定的顺序不一样,此处疑问待解决

    2. 手写的元素定位更加简洁,但是有时需要多加分析和测试才能准确定位元素

    3. 涉及函数间调用时,切记函数名称不能写错

    4. .stripped_string方法可以对对象进行切片,但是在Excel中显示效果不是很理想,此处代码应加以优化,或者对csv文件加以处理

    5. 写代码时需要注意缩进问题,不符合规范的缩进方式会导致代码无法正常运行。

总结:

    1. print及csv各项的顺序于data中设定的顺序不一样,此处疑问待解决

    2. 与css selector类似的定位方法,十分简洁

    3. 函数定义及使用,应仔细分析


    3. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值