网络爬虫学习笔记

常用写法

import requests
from lxml import html
etree=html.etree
import pandas as pd
网址 = "https://www.jkl.com.cn/cn/shopLis.aspx?id=865"
UA伪装 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.9231 SLBChan/8'}

network->name->headers

爬取京客隆网站店铺信息

import requests
from lxml import html
etree=html.etree
import pandas as pd
网址 = "https://www.jkl.com.cn/cn/shop.aspx"
UA伪装 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.9231 SLBChan/8'}
#1.拿取每个域区网址
响应数据=requests.get(url=网址,headers=UA伪装).text
解析 = etree.HTML(响应数据)
城区 = 解析.xpath('//div[@class="infoLis"]//@href')#‘/’表示一个层级;'//'表示多个层级
for 区 in 城区:
    网址2 = 'http://www.jkl.com.cn/cn/' + 区
    响应数据1 = requests.get(url=网址2,headers=UA伪装).text
    解析1 = etree.HTML(响应数据1)
    店铺名称 = 解析1.xpath('//span[@class="con01"]/text()')#
    详细地址 = 解析1.xpath('//span[@class="con02"]/text()')#
    电话号码 = 解析1.xpath('//span[@class="con03"]/text()')#
    营业时间 = 解析1.xpath('//span[@class="con04"]/text()')#都是列表方式存储
    列表 = []
    for 店名 in 店铺名称:
        新数据 = 店名.strip()
        列表.append(新数据)
    数据 = pd.DataFrame({'店名':列表,'地址':详细地址,'电话':电话号码,'时间':营业时间})#字典
    数据.to_csv('D:\One Driver\OneDrive\桌面\爬虫/店铺信息1.csv',index=False,header=0,mode = 'a',encoding='ANSI')

处理翻页URL不变的情况

import requests
from lxml import html
etree=html.etree
import pandas as pd
网址 = "https://www.jkl.com.cn/cn/shopLis.aspx?id=865"
UA伪装 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.9231 SLBChan/8'}
for 页码 in range(1,4):
    换页 = {
        '__EVENTTARGET': 'AspNetPager1',
        '__EVENTARGUMENT': 页码
    }
    响应数据1 = requests.post(url = 网址,headers = UA伪装,data=换页).text
    解析1 = etree.HTML(响应数据1)
    店铺名称 = 解析1.xpath('//span[@class="con01"]/text()')
    详细地址 = 解析1.xpath('//span[@class="con02"]/text()')
    电话号码 = 解析1.xpath('//span[@class="con03"]/text()')
    营业时间 = 解析1.xpath('//span[@class="con04"]/text()')
    列表 = []
    for 店名 in 店铺名称:
        新数据 = 店名.strip()
        列表.append(新数据)
    数据 = pd.DataFrame({'店名':列表,'地址':详细地址,'号码':电话号码,'时间':营业时间})
    数据.to_csv('D:\One Driver\OneDrive\桌面\爬虫/多页店铺信息.csv',index=False,header=0,mode='a',encoding='ANSI')

京客隆超市文件爬取

import requests
from lxml import html
etree=html.etree
import re
import os
网址 = "http://www.jkl.com.cn/cn/invest.aspx"
UA伪装 = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.9231 SLBChan/8'}
#1.拿各项目链接
响应数据 = requests.get(url=网址,headers=UA伪装).text
解析 = etree.HTML(响应数据)
项目名称 = 解析.xpath('//div[@class="infoLis"]//a/text()')
项目链接 = 解析.xpath('//div[@class="infoLis"]//@href')
项目名称 = [项目名称.strip() for 项目名称 in 项目名称]#列表推导式
项目链接 = ['http://www.jkl.com.cn/cn/'+项目链接 for 项目链接 in 项目链接]
字典1 = dict(zip(项目名称,项目链接))
#字典遍历
for 项目名称,项目链接 in 字典1.items():
    项目名称 = 项目名称.replace('/','.')
    项目名称 = 项目名称.replace('...','报表')
    路径 = 'D:\One Driver\OneDrive\桌面\爬虫\京客隆超市店铺爬取/'+项目名称
    if not os.path.exists(路径):
        os.mkdir(路径)
    响应数据 = requests.get(url=项目链接,headers=UA伪装).text
    解析1 = etree.HTML(响应数据)
    尾页 = 解析1.xpath('//a[text()="尾页"]/@href')
    if 尾页 !=[]:
        正则 = re.search("(\d+)'\)",尾页[0])
        页数 = 正则.group(1)
    else:
        页数 = 1
    #获取每一页文件链接
    for 页数 in range(1,int(页数)+1):
        data = {
            '__EVENTTARGET': 'AspNetPager1',
            '__EVENTARGUMENT': 页数
        }
        响应数据 = requests.get(url=项目链接,headers=UA伪装,params=data).text
        解析2 = etree.HTML(响应数据)
        #获取文件名,文件链接
        文件名称 = 解析2.xpath('//div[@class="newsLis"]//li/a/text()')
        文件链接 = 解析2.xpath('//div[@class="newsLis"]//li//@href')
        文件名称 = [文件名称.strip() for 文件名称 in 文件名称]
        if all(文件链接):
            文件链接 = ['http://www.jkl.com.cn'+文件链接 for 文件链接 in 文件链接]
            字典2 = dict(zip(文件名称,文件链接))
            for 文件名称,文件链接 in 字典2.items():
                文件名称 = 文件名称.replace('/','.')
                响应数据 = requests.get(url=文件链接, headers=UA伪装).content
                后缀 = 文件链接.split('.')[-1]
                文件路径 = 路径 + '/' + 文件名称 + '.' + 后缀
                with open(文件路径,'wb') as 变量名:
                    变量名.write(响应数据)
                    print(文件名称,'下载成功!!!')
posted @ 2021-10-11 21:53  卿源  阅读(101)  评论(0)    收藏  举报