python爬虫入门

爬虫的基本步骤:获取url、解析网页并寻找所需内容;数据处理;保存。
知识点:
(1)通常同一类型网页的url具有一定规律,爬取时需要注意观察,例如景点
第2页:https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-2
第3页:https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-3
(2)url的获取可以通过requests.get(url),也可以通过urllib2.urlopen(url)。requests是urllib2包下的子函数。
(3)爬虫的重点在于如何解析访问后返回的内容。以 html (xml)和 json 为例:
a. 格式html、xml:BeautifulSoup4 是一个HTML或XML文件中提取数据的Python库,将内容变为一种特定的结构,可使得每个节点都变为python对象。以根据html标签(例如:head、title)、css选择器(class标签)、属性、属性值等使用find或者find_all进行内容定位和提取。

bs4有四种解析方式:
‘html.parser’解析 速度适中,容错能力强
’lxml’解析 速度快,容错能力强
’xml’解析 速度快,唯一支持xml的解析器
’html5lib’解析 速度慢点,最好的容错性

b. 格式json:可以使用python 自带的json 包将内容变成字典进行引用

url = 'https://restapi.amap.com/v3/geocode/geo?address=武汉&key=a0325cbd9f7ab7eeb1bdb16ca78922b2'
temp1 = urllib2.urlopen(url).read()
temp2 = requests.get(url).text
temptext1 = json.loads(temp1)
temptext2 = json.loads(temp2)
address = temptext1['geocodes'][0]['location']

(4)内容定位:打开网页源,选择元素视图,代码和网页板块对应。

以去哪网景点信息为例,爬取上海景点信息。附代码。

import requests
from bs4 import BeautifulSoup
import numpy as np
import pandas as pd
'''
 1、数据采集
'''
def get_urls(n):
    return ['https://travel.qunar.com/p-cs299878-shanghai-jingdian-1-' + str(i+1) for i in range(n)]
# 创建函数,获取分页网址

def get_informations(u):
    ri = requests.get(u)
    # requests访问网站
    soupi = BeautifulSoup(ri.text,'lxml')
    # bs使用lxml方式解析页面
    infori = soupi.find('ul',class_="list_item clrfix").find_all('li')
    # 根据网页css标签获取列表内容
    datai = []
    n=0
    for i in infori:
        n+=1
        #print(i.text)
        dic = {}
        dic['lat'] = i['data-lat']
        dic['lng'] = i['data-lng']
        dic['景点名称'] = i.find('span',class_="cn_tit").text
        dic['攻略提到数量'] = i.find('div',class_="strategy_sum").text
        dic['点评数量'] = i.find('div',class_="comment_sum").text
        dic['景点排名'] = i.find('span',class_="ranking_sum").text
        dic['星级'] = i.find('span',class_="total_star").find('span')['style'].split(':')[1]
        datai.append(dic)
    # 分别获取字段内容
    #print('已采集%s条数据' %(n*10))
    return datai

# 构建页面爬虫

url_lst = get_urls(5)
# 获取5页网址

df = pd.DataFrame()
for u in url_lst:
    dfi = pd.DataFrame(get_informations(u))
    print dfi
    df = pd.concat([df, dfi])
    df.reset_index(inplace=True, drop=True)
# 采集数据

'''
2、字段筛选与数据清洗
'''
df['lng'] = df['lng'].astype(np.float)
df['lat'] = df['lat'].astype(np.float)    
df['点评数量'] = df['点评数量'].astype(np.int)     
df['攻略提到数量'] = df['攻略提到数量'].astype(np.int)   
    # 字段类型处理

df['星级'] = df['星级'].str.replace('%','').astype(np.float)
   # 星级字段处理

df['景点排名'] = df['景点排名'].str.split('第').str[1]
df['景点排名'].fillna(value = 0,inplace = True) 

'''
3、导出
'''
df.to_excel('JD.xlsx')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值