Python爬虫练习(urllib模块)

关注公众号“轻松学编程”了解更多。

1、获取百度首页数据

流程:a.设置请求地址 b.设置请求时间 c.获取响应(对响应进行解码)

'''
获取百度首页
'''
import urllib
from urllib import request # urllib.request = urllib2 '''
url, 请求地址
data=None, get请求,当data不为空时则是post请求
timeout 请求时间
'''
# 获取请求数据
try:
# 设置请求时间为1秒,超时则抛出错误
response = urllib.request.urlopen('http://www.baidu.com',timeout=1)
print(type(response))
print(response.read().decode('utf-8'))
except Exception as e:
print(e)
#打印结果为<urlopen error timed out>
2、模拟百度接口

流程:a.对关键字编码 b.设置请求地址 c.设置请求体(请求地址、请求头) d.获取响应(对响应进行解码)

'''
模拟百度接口
'''
import urllib
from urllib import request,parse def baiduAPI(kw):
''' :param kw: 关键字
:return: response,内容是html
'''
# a.对关键字编码
# 将字典拼接成wd1=123&wd2=1234字符串,即在url中携带参数
kw = {"kw": kw}
wd = urllib.parse.urlencode(kw,encoding="utf-8",errors="ignore")
#解码
# kw = urllib.parse.unquote(wd,encoding="utf-8",errors="ignore") # b.设置请求地址
url = "http://www.baidu.com/s?wd=" + wd
# 设置请求头
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
# c.设置请求体
req = urllib.request.Request(url,headers=header) # d.获取响应
response = urllib.request.urlopen(req) # 对响应进行解码
return response.read().decode("utf-8") if __name__ == '__main__':
kw = input("请输入搜索关键字:")
response = baiduAPI(kw)
print(response)

注意:路由地址补全:

http://www.baidu.com/

https://www.baidu.com

否则有可能报错:

#请求地址不完整
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request
3、爬取豆瓣电影

流程:a.动态构建url b.设置请求体(请求地址、请求头) c.获取响应(对响应为json数据) d.解析json数据 e.把数据写入文件

打开豆瓣电影:https://movie.douban.com/ 找到“分类点击” f12(或右键选择检查)打开控制台调试器–>找到Newwork -->选中XHR -->刷新页面 -->查看响应的数据获取url -->把页面往下拖点击“获取更多” -->查看多出来的响应,对比其中的url差别。

import json
import urllib
from urllib import request
# 首页
# https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start=0
# 第二页
# https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start=20 # a.动态构建url b.设置请求体(请求地址、请求头)
# c.获取响应(对响应为json数据) d.解析json数据 e.把数据写入文件 def getDouBanMovieInfo(pageRange):
'''
获取豆瓣电影信息
:param pageRange:页码范围
:return: json数据
'''
# a.动态构建url
for i in range(pageRange):
# 一页20条数据
url = "https://movie.douban.com/j/new_search_subjects?sort=T&range=0,10&tags=&start=%d" %(i * 20) # 设置请求头,模拟成是浏览器访问
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
# b.设置请求体(请求地址、请求头)
req = urllib.request.Request(url,headers=header)
# c.获取响应(对响应为json数据)
response = urllib.request.urlopen(req).read().decode("utf-8")
# d.解析json数据
mdata = json.loads(response)
data = mdata["data"]
# print(data)
for i in data:
# 明星
casts = i["casts"]
# 导演
directors = i["directors"]
# 电影名
title = i["title"]
# print(directors)
# e.把数据写入文件
with open("movie.txt","a+",encoding="utf-8",errors="ignore") as f:
item = "电影:"+title + " 导演:" + ",".join(directors) + " 演员:" + ",".join(casts)
f.write(item + "\n")
f.flush() if __name__ == '__main__':
pageRange = int(input("输入页码范围:"))
# 读取1也数据
getDouBanMovieInfo(pageRange)

4、阿里招聘

流程

1、获取相关岗位总页数

a.设置请求地址(种子) b.设置要提交的表单数据 c.获取响应(对响应为json数据) d.解析json数据 e.返回数据

2、获取相关岗位信息

a.设置请求地址 b.设置要提交的表单数据 c.设置请求体 d.获取响应(对响应为json数据) e.解析json数据 f.返回数据

import json
import urllib
from urllib import request,parse def getTotalPage(kw):
'''
获取相关岗位总页数
:param kw: 搜索关键字
:return: int 总页数
'''
# a.设置请求地址(种子)
url = "https://job.alibaba.com/zhaopin/socialPositionList/doList.json"
# 设置请求头
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
# b.设置要提交的表单数据
data = {
"pageSize": "10",
"t": "0.6069253832315697",
"keyWord": kw,
"location": "",
"second": "",
"first": "",
"pageIndex": "1",
}
# 表单数据编码
data = urllib.parse.urlencode(data).encode("utf-8")
# 设置请求体
req = urllib.request.Request(url,data=data,headers=header)
# 获取响应
response = urllib.request.urlopen(req).read().decode("utf-8")
# d.转json
data = json.loads(response)
print(data)
return data["returnValue"]["totalPage"] def getPosition(kw,totalPage):
'''
获取相关岗位数量
:param kw: 搜索关键字
:param totalPage: 总页数
:return:
'''
# pageIndex是从1开始
for i in range(1,totalPage + 1):
# a.设置请求地址
url = "https://job.alibaba.com/zhaopin/socialPositionList/doList.json"
# 设置请求头
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
# b.设置要提交的表单数据
data = {
"pageSize": "10",
"t": "0.6069253832315697",
"keyWord": kw,
"location": "",
"second": "",
"first": "",
"pageIndex": i,
}
# 表单数据编码
data = urllib.parse.urlencode(data).encode("utf-8")
# 设置请求体,POST请求
req = urllib.request.Request(url, data=data, headers=header)
# 获取响应
response = urllib.request.urlopen(req).read().decode("utf-8")
# d.转json
data = json.loads(response)
dataValue = data["returnValue"]["datas"] for job in dataValue:
# 岗位名称
name = job["name"]
# # 要求
# requirement = job["requirement"]
# 学历
degree = job["degree"]
# # 描述
# description = job["description"]
# 工作经历
workExperience = job["workExperience"]
# print(name,requirement,degree,description,workExperience)
with open("joblist.txt","a+",encoding="utf-8") as f:
item = "岗位:" + name + " 学历:" + degree + " 工作经历:"+workExperience + "\n"
f.write(item)
f.flush() if __name__ == '__main__':
# 查询岗位列表
jobList = ["python","java"]
# 获取职位总页数
for job in jobList:
totalPage = getTotalPage(job)
getPosition(job,totalPage)
5、12306

流程

a.设置忽略安全证书 b.设置请求体(请求地址、请求头) c.获取响应(对响应进行解码)

import urllib
from urllib import request
import ssl # a.设置忽略安全证书 b.设置请求体(请求地址、请求头) d.获取响应(对响应进行解码)
# 设置忽略安全证书
context = ssl._create_unverified_context()
url = "http://www.12306.cn/mormhweb/"
# 设置请求头,模拟成是浏览器访问
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
req = urllib.request.Request(url,headers=header)
response = urllib.request.urlopen(req,context=context).read().decode("utf-8")
print(response)
6、51job获取岗位数

流程

a.设置正则匹配 b.对岗位进行utf-8编码 c.设置url d.设置请求体(请求地址、请求头) e.获取响应(对响应进行解码)

# 获取岗位数量
'''
<div class="rt">
共3500条职位
</div>
'''
import urllib
from urllib import request,parse
import re
# a.设置正则匹配 b.设置请求体(请求地址、请求头) d.获取响应(对响应进行解码)
# 设置正则匹配
jobNumRe = "共(\d+)条职位" def getJobNum(job):
'''
获取职位数量
:param job: 职位
:return: int
'''
# 编码,空键
job = urllib.parse.urlencode({"":job})
url = "https://search.51job.com/list/030200,000000,0000,00,9,99,"+job+",2,1.html"
# 设置请求头,模拟成是浏览器访问
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
req = urllib.request.Request(url,headers=header)
response = urllib.request.urlopen(req).read().decode("gbk")
jobNum = re.findall(jobNumRe,response)
return jobNum if __name__ == '__main__':
jobList = ["python","java","项目经理"]
for job in jobList:
print(getJobNum(job))
7、模拟有道翻译
import urllib
from urllib import request,parse def getTranslate(kw):
'''
模拟有道翻译,
:param kw: 关键字
:return: 翻译结果
'''
# 设置请求头
header = {
"User-Agent": '''Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'''
}
# 设置表单数据
data = {
"i": kw,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": "1530692157778",
"sign": "86981073c4755432afabd9680e3127ab",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTIME",
"typoResult": "false",
}
data = urllib.parse.urlencode(data).encode("utf-8") # url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
# {"errorCode":50},使用上面这个url会报错
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule" #构建请求体
req = urllib.request.Request(url,data=data,headers=header)
response = urllib.request.urlopen(req)
# 字符串转成字典
retList = eval(response.read().decode("utf-8"))
# print(ret)
# print(retList["translateResult"])
retL = []
for ret in retList["translateResult"]:
# print(ret[0]["tgt"])
retL.append(ret[0]["tgt"])
return retL if __name__ == '__main__':
kw = input("输入要翻译的词语:")
response = getTranslate(kw)
print(response)

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

Python爬虫urllib模块的更多相关文章

  1. python爬虫 urllib模块url编码处理

    案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦'的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...

  2. python 爬虫 urllib模块 目录

    python 爬虫 urllib模块介绍 python 爬虫 urllib模块 url编码处理 python 爬虫 urllib模块 反爬虫机制UA python 爬虫 urllib模块 发起post ...

  3. python爬虫-urllib模块

    urllib 模块是一个高级的 web 交流库,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象.urllib 支持各种 web 协议,例如:HTTP.FTP.Gophe ...

  4. python 爬虫 urllib模块 发起post请求

    urllib模块发起的POST请求 案例:爬取百度翻译的翻译结果 1.通过浏览器捉包工具,找到POST请求的url 针对ajax页面请求的所对应url获取,需要用到浏览器的捉包工具.查看百度翻译针对某 ...

  5. python 爬虫 urllib模块介绍

    一.urllib库 概念:urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urll ...

  6. python 爬虫 urllib模块 反爬虫机制UA

    方法: 使用urlencode函数 urllib.request.urlopen() import urllib.request import urllib.parse url = 'https:// ...

  7. python 爬虫 urllib模块 url编码处理

    案例:爬取使用搜狗根据指定词条搜索到的页面数据(例如爬取词条为‘周杰伦’的页面数据) import urllib.request # 1.指定url url = 'https://www.sogou. ...

  8. 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

    定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...

  9. Python爬虫Urllib库的高级用法

    Python爬虫Urllib库的高级用法 设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Head ...

随机推荐

  1. Dell XPS 7590 Hackintosh

    网上主流引导Hackintosh的工具有Chameleon, Clover和OpenCore. 但是随着Hackintosh重要驱动开发团队acidanthera逐渐转向OpenCore,后者显然才是 ...

  2. sysfs是什么??

    来源:https://blog.csdn.net/qq_36412526/article/details/83751520 第一次接触:sysfs, 这里记录过程: 原文:Documenttation ...

  3. 【题解】CF1207E XOR Guessing

    Link 这是一道交互题. \(\text{Solution:}\) 观察到猜的数范围只有\(2^{14}.\) 我第一次想到的方法是,我们可以确定系统选择的两个数的异或和,用这个异或和去穷举所有目标 ...

  4. 跟我一起学Redis之五种基本类型及其应用场景举例(干了6个小时)

    前言 来啦,老弟?来啦,上一篇就当唠唠嗑,接下来就开始进行实操撸命令,计划是先整体单纯说说Redis的各种用法和应用,最后再结合代码归纳总结. Redis默认有16个数据库(编号为0~15),默认使用 ...

  5. 使用Appium进行iOS的真机自动化测试

    windows不支持appium连接ios,只适用于mac 使用Appium进行iOS的真机自动化测试 安装类库 Homebrew 如果没有安装过Homebrew,先安装[ homebrew ] np ...

  6. 版本控制系统之基于httpd搭建私有git仓库

    在上一篇博客中,我们主要聊到了git的基本工作原理和一些常用的git命令的使用:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13787701.html:今天我 ...

  7. 设计完美windbg断点

    说到现场调试,断点是最重要的.通常,在生产环境中解决一个非常复杂的问题需要在本地.非生产环境中调试我自己的一台测试机器.我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要 ...

  8. Django ORM 引发的数据库 N+1 性能问题

    背景描述 最近在使用 Django 时,发现当调用 api 后,在数据库同一个进程下的事务中,出现了大量的数据库查询语句.调查后发现,是由于 Django ORM 的机制所引起. Django Obj ...

  9. 多测师讲解自动化测试 _RF模拟鼠标悬停_高级讲师肖sir

    test19 Open Browser https://www.ctrip.com/?sid=155952&allianceid=4897&ouid=index gc Maximize ...

  10. Jenkins:用maven在本地打包部署一个github的springboot项目(Jenkins 2.257)

    一,部署的准备工作 1,测试项目的地址: https://github.com/liuhongdi/profile 是一个空白项目 2,准备java环境:参见: https://www.cnblogs ...