一.项目背景

本次主要是为了巩固之前学,将多个软件/模块连贯起来,做完整案列

二.项目需求

2.1 获取多页数据信息

2.2 下载到本地

三.准备

这个环节主要是针对本次爬取选择合适的获取方式和解析方式

本次选择:requests  xpath

本次获取对象:京客隆-店铺分布-店铺信息

python爬多页 python爬取多页数据_数据

 

四.爬取信息代码操作

4.1 导入模块:需要用的时候再到开头添加模块

import requests #获取方式
from lxml import etree #xpath解析
import pandas as pd #采用pandas方式下载数据

4.2 获取url 和 请求头(反爬),请求头是字典形式

url=' https://www.jkl.com.cn/shop.aspx'
headers={
    'User-Agent':'这里放入自己浏览器的链接就行,需要引号'
}

4.3 获取网页内容:得到整个网页信息

response=requests.get(url=url,headers=headers).text

#也可以写2行方便看:
#response=requests.get(url=url,headers=headers)
#content=response.text

结果预览:

python爬多页 python爬取多页数据_开发语言_02

 

4.4解析网页:

4.4.1 解析每个区的短链接

path=etree.HTML(response)   #返回结果:<Element html at 0x1db91116f80> 
areas=path.xpath('//div[@class="infoLis"]//@href')

需要获取的:

python爬多页 python爬取多页数据_python爬多页_03

返回结果:

python爬多页 python爬取多页数据_python爬多页_04

 4.4.2 获取每个区的长链接

观察:朝阳区  

python爬多页 python爬取多页数据_python爬多页_05

规律:https://www.jkl.com.cn/ +areas

代码:

#i代表每一个区,将每个区的短链接遍历出来,拼接成完整链接
for i in areas:
    url2='https://www.jkl.com.cn/'+i

     #获取每一页的详情:这里得出是每个区的整体网页
    response1=requests.get(url=url2,headers=headers).text

    #解析每个区里具体的信息内容
    path1=etree.HTML(response1)
    店铺名称=path1.xpath('//span[@class="con01"]/text()')
    经营地址=path1.xpath('//span[@class="con02"]/text()')
    电话=path1.xpath('//span[@class="con03"]/text()')
    营业时间=path1.xpath('//span[@class="con04"]/text()')

 获取信息网页观察:

python爬多页 python爬取多页数据_python爬多页_06

 五.下载到本地

采用的pandas写入,请导入panda模块

运行代码后,D盘就会有文件了

数据=pd.DataFrame({"店名":店铺名称,"地址":经营地址,"电话":电话,"营业时间":营业时间})
数据.to_csv('D:/shop3.csv',index=False,header=0,mode='a',encoding='utf_8_sig')

六.本次报错及问题汇总


1.UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character

报错行如下:

python爬多页 python爬取多页数据_python_07

正确解法:encoding="utf_8_sig"

尝试过的解法(均不可):

1.修改文件名为中文:依旧报错

2.删掉encoding:不报错,但是乱码

3.encoding="uft-8":不报错,但是乱码

4.encoding="gbk":不报错,但是乱码

2.headers=0 设置问题

还没有找到只存有一个表头的方法,预计只能通过后续的数据清洗来进行

未设置:获取的每一页数据均有表头

python爬多页 python爬取多页数据_开发语言_08

 

设置后:无表头

python爬多页 python爬取多页数据_开发语言_09

 

ps:xpath解析找路径真的很有意思