爬虫实战之如何爬取302页面-基础 2019-05-30

image.png

在爬取页面时,我们时常会遇到状态码不为202的页面,我们在遇到反爬时一般会有以下几种方法进行应对。
1、加User-Agent验证(代理网络用户取得网络信息)
2、加代理
3、验证码(图像识别或借助第三方打码平台)
4、selenium(动态加载)
5、换平台

接下来我们将讲解当网页状态码为302时,如何对网页进行爬取
--以klook网站日本旅游网页爬取为例
url='https://www.klook.com/zh-CN/search?type=country&query=%E6%97%A5%E6%9C%AC'

#导入包
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
url='https://www.klook.com/zh-CN/search?type=country&query=%E6%97%A5%E6%9C%AC'
r = requests.get(url)
soup = BeautifulSoup(r.text,'lxml')
urls = soup.find('div',class_='act_list').find_all('a')
#获取所有网址
url_lst = []
for url in urls:
    url_lst.append(url['href'])
    
url_lst
#为每个网址添加前缀'https://www.klook.com’
for n in range(0,len(url_lst)):
    url_lst[n]='https://www.klook.com'+url_lst[n]
print(url_lst)

点开网页,按F12查看元素,获取headers添加到requests.get里

def datacrawler(urli):
    headers = {#自行添加
}
    ri = requests.get(url=urli,headers=headers)   
    soupi = BeautifulSoup(ri.text,'lxml')
    title = soupi.find('h1',class_='t32').text
    info1 = soupi.find('ul',class_='act_icons t14').text
    info1 = re.split('[\n]',info1)
    for item in info1[:]:
        if item == '':
            info1.remove(item)
    info2 = soupi.find('strong',class_='t24').text
    info2 = re.split('[\n]',info2)
    for item in info2[:]:
        if item == '':
            info2.remove(item)
    info3 = soupi.find('div',class_='left_box').text
    info3 = re.split('[\n]',info3)
    for item in info3[:]:
        if item == '':
            info3.remove(item)
    info4 = soupi.find('span',class_='j_goto_review star_box').text
    info4 = re.split('[\n]',info4)
    for item in info4[:]:
        if item == '':
            info4.remove(item)
    dic={'票名':title,'注意事项':info1,'价格':info2,'参加人数':info3,'评分情况':info4}
    return dic

data = []
n = 0
for u in url_lst:
    print('采集网页',u)
    n+=1
    data.append(datacrawler(u))
    print('采集网页成功,总采集%i条网址/n'%n)

接下来将数据转存为文件,引入pandas包

import pandas as pd
tb = pd.DataFrame(data)
tb.to_excel('D:/日本klook网页爬取.xlsx',encoding='utf-8')
df = pd.read_excel('D:/日本klook网页爬取.xlsx')

对数据进行一定程度的清洗和处理,包括分列和删除无效字符

df['价格1']=df['价格'].str.split('¥').str[1]
df['评分']=df['评分情况'].str.split(',').str[0]
df['评价数目']=df['评分情况'].str.split('条').str[0]

以上就是此次爬取流程,属于基础爬虫,针对302页面,主要是加headers条件。

今日激励:Our integrity sells for so little, but it is all we really have.
尊严不值钱,却是我们仅有的。

你可能感兴趣的:(爬虫实战之如何爬取302页面-基础 2019-05-30)