Python爬虫(三)

article/2025/9/7 14:25:20

Python爬虫(三)

一、ajax请求豆瓣电影第一页

# get请求
# 获取豆瓣电影的第一页数据并保存
import urllib.request
url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20'
headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'
}# 请求对象的定制
request =urllib.request.Request(url=url,headers=headers)
# 获取响应的数据
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)
# 数据下载到本地
# open方法默认情况下使用gbk编码,若想保存汉字,则需要在open方法中指定编码格式为utf-8
# fp = open('douban.json','w',encoding='utf-8')
# fp.write(content)fp = open('douban.json','w',encoding='utf-8')
fp.write(content)
# 这两行等价于
with open('douban1.json','w',encoding='utf-8') as fp:fp.write(content)

在这里插入图片描述
二、ajax请求豆瓣电影前十页

# 豆瓣电影前十页
# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&
# start=0&limit=20# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&
# start=20&limit=20# https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&
# start=40&limit=20# page   1    2    3    4
# start  0    20   40   60   start = (page - 1) * 20
import urllib.parse
def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'data = {'start' : (page - 1)*20,'limit' : 20 ,}data = urllib.parse.urlencode(data)url = base_url + dataprint(url)headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'}
# 1.请求对象的定制
# request = urllib.request.Request()# 程序入口
if __name__ == '__main__':start_page = int(input('请输入起始页码'))end_page = int(input('请输入结束页码'))for page in range (start_page , end_page + 1):# 每一页都有请求对象的定制create_request(page)# print(page)

在这里插入图片描述
完整案例:

import urllib.parse
import urllib.request
def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&'data = {'start' : (page - 1)*20,'limit' : 20 ,}data = urllib.parse.urlencode(data)url = base_url + dataprint(url)headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'}# 1.请求对象的定制request = urllib.request.Request(url = url , headers = headers)return request
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content
def down_load(page,content):with open('douban_' + str(page)+'.json' ,'w',encoding='utf-8') as fp:fp.write(content)
# 程序入口
if __name__ == '__main__':start_page = int(input('请输入起始页码'))end_page = int(input('请输入结束页码'))for page in range (start_page , end_page + 1):# 每一页都有请求对象的定制request = create_request(page)# 2.获取响应的数据content = get_content(request)# 3.下载数据down_load(page,content)# print(page)

三、ajax的post请求肯德基官网

# 第一页
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# post
# cname: 黄山
# pid:
# pageIndex: 1
# pageSize: 10# 第二页
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# post
# cname: 黄山
# pid:
# pageIndex: 2
# pageSize: 10import urllib.request
import urllib.parse
def creat_request(page):base_url = 'https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'data = {'cname': '黄山','pid': '','pageIndex': page,'pageSize': '10'}data = urllib.parse.urlencode(data).encode('utf-8')headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'}request = urllib.request.Request(url=base_url,headers=headers,data=data)return request
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content
def down_load(page,content):with open('kfc_'+str(page)+'.json','w',encoding='utf-8') as fp:fp.write(content)
if __name__ == '__main__':start_page = int(input('请输入起始页'))end_page = int(input('请输入结束页'))for page in range(start_page,end_page + 1):# 请求对象定制request = creat_request(page)# 获取网页源码content = get_content(request)# 下载down_load(page,content)

在这里插入图片描述
四、urllib异常
URLErrorHTTPError

  1. HTTPError类是URLError类的子类

  2. 导入包urllib.error.HTTPError urllib.error.URLError(或者直接导入urllib.error)

  3. http错误:http错误是针对浏览器无法链接到服务器而增加出来的错误提示,引导并告诉浏览器该页是哪里出现问题。

  4. 通过urllib发送请求的时候,有可能会发送失败,若想要代码更加健壮,可以通过try-except 进行捕获,异常有两类,URLErrorHttpError

    import urllib.request
    import urllib.error
    url = ‘https://blog.csdn.net/sulixu/article/details/1198189491’
    headers = {
    ‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44’
    }
    try:
    request = urllib.request.Request(url=url ,headers=headers)
    response = urllib.request.urlopen(request)
    content = response.read().decode(‘utf-8’)
    print(content)
    except urllib.error.HTTPError:
    print(‘系统正在升级’)
    except urllib.error.URLError:
    print(‘系统还在升级…’)

五、微博的cookie登录

# 个人信息页面是utf-8,但还是报编码错误,由于是没有进入到个人信息页面,网页拦截到登录页面
# 而登录页面并非utf-8编码import urllib.request
url = 'https://weibo.com/u/6574284471'
headers = {# ':authority':' weibo.com',# ':method':' GET',# ':path':' /u/6574284471',# ':scheme':' https','accept':' text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',# 'accept-encoding':' gzip, deflate, br','accept-language':' zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','cache-control':' max-age=0','cookie: XSRF-TOKEN=6ma7fyurg-D7srMvPHSBXnd7; PC_TOKEN=c80929a33d; SUB=_2A25Pt6gfDeRhGeBL7FYT-CrIzD2IHXVsxJ7XrDV8PUNbmtANLU_ikW9NRsq_VXzy15yBjKrXXuLy01cvv2Vl9GaI; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WWh0duRqerzYUFYCVXfeaq95JpX5KzhUgL.FoqfS0BE1hBXS022dJLoIp-LxKqL1K-LBoMLxKnLBK2L12xA9cqt; ALF=1687489486; SSOLoginState=1655953487; _s_tentry=weibo.com; Apache=4088119873839.28.1655954158255; SINAGLOBAL=4088119873839.28.1655954158255; ULV=1655954158291:1:1:1:4088119873839.28.1655954158255':'; WBPSESS=jKyskQ8JC9Xst5B1mV_fu6PgU8yZ2Wz8GqZ7KvsizlaQYIWJEyF7NSFv2ZP4uCpwz4tKG2BL44ACE6phIx2TUnD3W1v9mxLa_MQC4u4f2UaPhXf55kpgp85_A2VrDQjuAtgDgiAhD-DP14cuzq0UDA==',#referer 判断当前路径是不是由上一个路径进来的,一般情况下,制作用于图片防盗链'referer: https':'//weibo.com/newlogin?tabtype=weibo&gid=102803&openLoginLayer=0&url=https%3A%2F%2Fweibo.com%2F','sec-ch-ua':' " Not A;Brand";v="99", "Chromium";v="102", "Microsoft Edge";v="102"','sec-ch-ua-mobile':' ?0','sec-ch-ua-platform':' "Windows"','sec-fetch-dest':' document','sec-fetch-mode':' navigate','sec-fetch-site':' same-origin','sec-fetch-user':' ?1','upgrade-insecure-requests':' 1','user-agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44',
}
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen((request))
# 获取响应的数据
content = response.read().decode('utf-8')
# print(content)
# 将数据保存到本地
with open('file/weibo.html','w',encoding='utf-8') as fp:fp.write(content)

六、Handler处理器的基本使用
作用:
urllib.request.urlopen(url)—>无法定制请求头
request = urllib.request.Request(url=url,headers=headers,data=data)—>可以定制请求头
Handler—>定制更高级的请求头(随着业务逻辑的拓展,请求对象的定制已经满足不了我们的需求,例如:动态Cookie和代理不能使用请求对象的定制i)

# 需求:使用handler访问百度获取网页源码
import urllib.request
url = 'http://www.baidu.com'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'
}
request = urllib.request.Request(url=url,headers=headers)
# handler    build_opener   open
# (1) 获取handler对象
handler = urllib.request.HTTPHandler()
# (2) 获取opener对象
opener = urllib.request.build_opener(handler)
# (3) 调用open方法
response = opener = open(request)
content = response.read().decode('utf-8')
print(content)

七、代理服务器
在快代理https://free.kuaidaili.com/free/获取免费IP和端口号在这里插入图片描述

import urllib.request
url = 'http://www.baidu.com/s?wd=ip'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'
}
request = urllib.request.Request(url=url,headers=headers)
# response = urllib.request.urlopen(request)
# handler builder_open  open
posix = {'http': '103.37.141.69:80'
}
handler = urllib.request.ProxyHandler(proxies = posix)
opener = urllib.request.build_opener(handler)
response = opener.open(request)content = response.read().decode('utf-8')
with open('file/daili.html','w',encoding='utf-8') as fp:fp.write(content)

八、代理池

import urllib.request
import  random
url = 'http://www.baidu.com/s?wd=ip'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'
}
proxies_pool = [{ 'http': '103.37.141.69:8011' },{ 'http': '103.37.141.69:8022' },{ 'http': '103.37.141.69:8033' }
]
proxies = random.choice(proxies_pool)  //随机选择IP地址
# print(proxies)
request = urllib.request.Request(url=url,headers=headers)
handler = urllib.request.ProxyHandler(proxies = proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)
content = response.read().decode('utf-8')
with open('file/daili.html','w',encoding='utf-8') as fp:fp.write(content)

九、xpath插件
1.安装xpath插件:https://www.aliyundrive.com/s/YCtumb2D2J3 提取码: o4t2
2.安装lxml库

pip install lxml -i https://pypi.douban.com/simple

在这里插入图片描述
3.案例解析xpath
①解析本地文件 etree.parse

## 解析xpath  帮助用户获取网页部分源码的一种方式
from lxml import etree
# 一、解析本地文件  etree.parse
tree = etree.parse('file/xpath解析本地文件.html')
# print(tree)
# tree.xpath('xpath路径')# 1.查找ul下面的li
# //:查找所有子孙节点,不考虑层级关系
# /:找直接子节点
# li_list = tree.xpath('//body/ul/li')
# print(li_list)
# 判断列表长度
# print(len(li_list))# 2.查找所有有id属性的li标签
# li_list = tree.xpath('//ul/li[@id]')# text()可以获取标签中的内容
# li_list = tree.xpath('//ul/li[@id]/text()')
# 查找id为l1的li标签  注意添加引号
# li_list = tree.xpath('//ul/li[@id="l1"]/text()')
# 查找到id为l1的li标签的class的属性值
# li_list = tree.xpath('//ul/li[@id="l1"]/@class')
# 模糊查询  id中包含l的标签
# li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()')# 查询id的至以l开头的li标签
# li_list = tree.xpath('//ul/li[starts-with(@id,"l")]/text()')
# 查询id为l1和class为c1的  逻辑运算
li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()')li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text() ')
print(len(li_list))
print(li_list)

②服务器响应的数据 response.read().decode(‘utf-8’) etree.HTML()

import urllib.request
url = 'http://www.baidu.com/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44'
}
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器访问服务器
response = urllib.request.urlopen(request)
# 获取网页源码
content = response.read().decode('utf-8')
# 解析网页源码 来获取想要的数据
from lxml import etree
# 解析服务器响应的文件
tree = etree.HTML(content)
# 获取想要的数据 xpath的返回值是一个列表类型的数据
result = tree.xpath('//input[@id ="su"]/@value')[0]
print(result)

在这里插入图片描述

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦


http://chatgpt.dhexx.cn/article/sZ5w2Ijw.shtml

相关文章

Python3爬虫(一)抓取网页的html

因为代码只有几行,所以可以先贴代码: import urllib.request url rhttp://douban.com res urllib.request.urlopen(url) html res.read().decode(utf-8) print(html) 第一行,导入 urllib库的request模块 第二行,指定要抓取的网…

python3爬虫-Python3网络爬虫入门实战解析

网络爬虫简介 网络爬虫,也叫网络蜘蛛(Web?Spider)。它根据网页地址(URL)爬取网页内容,而网页地址(URL)就是我们在浏览器中输入的网站链接。 在浏览器的地址栏输入URL地址,在网页处右键单击,找到检查。(不同浏览器的叫法不同&am…

Python3爬虫概述

爬虫基础 文章目录 爬虫基础爬虫概述Session和Cookie简述1. Session2. Cookie3.关于Session 参考资料 爬虫概述 简单来说,爬虫就是从网页上提取信息并保存的自动化程序。 爬虫程序的工作: 获取网页: 爬虫需要先获取网页信息,即网页源代码进行后续分析。…

python爬虫之

使用BeaufulSoup获取指定class时,结果是将我们所输入的字符串去做模糊匹配,因此会将所有包含的class结果输出,如下图: 但我们所需要的可能是精确匹配的那一条,这个时候更换一下代码即可: web_url http://…

Python3 网络爬虫 <教程全集>

1.1 最简单的爬虫 我的老师:Jack Cui PS:我是通过 看 Jack Cui 老师的文章 学习的爬虫,也为我之后的 爬虫打开了大门。 1.1.1 URL 是什么? 在学习 爬虫之前,我们必须知道 我们 平常 所说的网址,实际上 叫…

爬虫python

一、Urllib 1.什么是互联网爬虫? 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解释1:通过一个程序,根据Ur…

手把手教你如何入门Python3 网络爬虫

很多朋友学习Python都是先从爬虫开始,其原因不外两方面: 其一Python对爬虫支持度较好,类库众多,其二语法简单,入门容易,所以两者形影相随,不离不弃。 要使用python语言做爬虫,首先需…

python3 爬虫

一.网络爬虫(Web Crawler) 1.网络爬虫:是一种按照一定的规则,自动地抓取网上信息的程序或者脚本。 2.爬虫:为了获取网上大量的我们能看的到或看不到的数据 3.基本步骤:(1)定位要爬的…

python 爬虫

Python 爬虫教程(更新中) 目录 1. 简介 2. 注意 3. xpathselenium 4. xpathscarpy(更新中) 5. icrawler 【借助更加便捷操作的pip包】 1. 简介 爬虫主要有2种方式:API(报文)-静态、模拟鼠标点击形式-动态; Xpath Scrapy(…

【python】python爬虫

爬虫基础 HTTP协议 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是基于TCP/IP通信协议来传递数据(HT…

Python3 网络爬虫(一):初识网络爬虫之夜探老王家(2020年最新版)

一、前言 3年前,我在 csdn 写过 Python3 网络爬虫系列教程,经过三年的积累,累计阅读量近 90W。 同时,我也在 Github 开源了所有 Python3 网络爬虫代码,累积获得 10.3k 的 star,4.1k 的 fork。 可以说&…

Python3 爬虫快速入门攻略

一、什么是网络爬虫? 1、定义:网络爬虫(Web Spider),又被称为网页蜘蛛,是一种按照一定的规则,自动地抓取网站信息的程序或者脚本。 2、简介:网络蜘蛛是一个很形象的名字。如果把互…

Python3爬虫(一):Python的入门学习以及Python网络爬虫的初步认识

Author:baiyucraft BLog: baiyucraft’s Home IDE:PyCharm 其实对于Python,一直想去学习,但一直没有足够的的时候去研究,这次趁疫情在家的时间,对于Python好好的研究研究。算是作为自己对于Py…

Python3网络爬虫(一):利用urllib进行简单的网页抓取

运行平台:Windows Python版本:Python3.x IDE:Sublime text3 转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/58716886 一直想学习Python爬虫的知识,在网上搜索了一下,大部分都是…

python3 爬虫(初试牛刀)

此文章仅供学习交流使用 在学习爬虫之前,把最近对于 VMware 的网络学习做个总结 接下来,步入正题! 分析 Robots 协议 禁止所有爬虫访问任何目录的代码: User-agent: * Disallow:/允许所有爬虫访问任何目录的代码: …

Python3爬虫详解

1概述 爬虫在Python中是个实现起来比较简单,关键在于网页的分析和内容的抓取。最近由于个人需要写了些内容,这里总结下爬虫相关的内容。 本文爬虫相关实现没有使用scrapy框架,通过urllib请求、bs4来实现。 2网络请求 网络请求部分用到urlli…

python3爬虫学习

python3爬虫学习 一、爬虫流程: ①先由urllib的request打开Url得到网页html文档 ②浏览器打开网页源代码分析元素节点 ③通过Beautiful Soup或则正则表达式提取想要的数据 ④存储数据到本地磁盘或数据库(抓取,分析,存储&…

最通俗、最详细的 Python3 网络爬虫入门指南

很多朋友学习Python都是先从爬虫开始,其原因不外两方面: 其一Python对爬虫支持度较好,类库众多,其二语法简单,入门容易,所以两者形影相随,不离不弃。 要使用python语言做爬虫,首先需…

Maven安装和配置本地仓库和阿里云镜像

maven安装配置换阿里源 1.下载maven 打开maven官网https://maven.apache.org/download.cgi,下载maven安装包,下载完成后解压到你想放的位置,不用安装 2.配置环境变量 3.配置阿里源和repository地址 打开刚才的解压文件conf文件夹下的setting.…

阿里云云效Maven仓库

一、Maven仓库概要 私服的目的:我们有一些自己的公用包,不想拉取工程编译,直接使用已经上传到私服的Jar包,在需要使用的项目工程直接引用使用,加速开发效率和编译效率。 阿里云仓库地址: 公用主仓库&#…