python爬虫入门
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫入门相关的知识,希望对你有一定的参考价值。
python爬虫入门(2)
Requests库实操
文章目录
一.实例
1.爬取京东热带风味冰红茶
在这破防的考试周,我们先来爬取一下超级美味的热带风味吧!
真的破防了啊!何以解忧,唯有红茶!呜呜呜😭😭😭
爬取它
import requests
url = "https://item.jd.com/100004890352"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print("fail")
运行结果:
爬取成功!
2.百度搜索关键词提交
百度一下,你就知道👆当我们进行百度搜索的时候,会发生什么?👀
其实,搜索引擎都有
关键词提交接口
<--百度的关键词接口--> http://www.baidu.com/s?wd=keyword
那么只要用requests库构造一个符合百度接口的url就可以了
前面说过
那么根据关键词提交接口,我们就构造如下键值对
{'wd':'爬虫'}
## 百度搜索
import requests
keyword = "爬虫"
try:
kv = {'wd':keyword}#键值对
r = requests.get("http://www.baidu.com/s",params=kv)
# 打印response对象中包含的request对象信息,
print(r.request.url)#别写成requests.url
r.raise_for_status()
#看一下返回的长度,先不打印出来内容
print(len(r.text))
except:
print("fail")
运行结果
http://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB
709257
其它搜索引擎
每个搜索引擎有不同的关键词提交API
必应搜索是咋样的呢?
import requests
# 必应国内版
keyword = "爬虫"
try:
kv = {'q': keyword}
r = requests.get("https://www.bing.com/?mkt=zh-CN", params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("fail")
运行结果
https://www.bing.com/search?mkt=zh-CN&q=%E7%88%AC%E8%99%AB
146609
google
呢?
import requests
# 谷歌搜索
keyword = "爬虫"
try:
kv = {'q': keyword} # 键值对
r = requests.get("https://www.google.com/", params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("fail")
https://www.google.com/
运行结果
https://www.google.com/?q=%E7%88%AC%E8%99%AB
14194
所以,各个搜索引擎就是键值对的前面那个端口不同
可参考学习
看到两个比较好的讲爬取关键词的教程,可以点击here and there查看
3.爬取泸溪河图片并保存
回顾一下经典🐶
腻了吧唧的不好吃,有点儿像豌豆黄。里边儿还有什么,红豆啊什么之类的。还没我那冰红茶好喝呢。但是它那个乳酪,蛋黄还挺好吃的。刚才吃了俩,叫什么?泸溪河,泸溪河。这有点儿腻。
黏不拉叽的,又不是老北京那种豌豆黄儿。但是它有点那个…豌豆的那个感觉。应该是什么豆磨的面捏的一个糕。
用过图床,网络图片的一般格式应该就了解了,这里就不解释了
下面通过爬取图片的url,将图片从二进制格式转化为文件
关于os库的用法 👉here
python文件操作👉 with open等
保持原文件名
import requests
import os
url = "https://img2.baidu.com/it/u=4284204932,2551468984&fm=26&fmt=auto&gp=0.jpg"
root = "C://Users//86171//Desktop"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
#根目录不存在,就建立根目录
if not os.path.exists(path):
#文件不存在,就爬取文件
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print('爬下来了,快去看看吧')
else:
print("already existing")
except:
print("fail")
#r.content是HTTP相应内容的二进制形式
#os.path.exists(path) 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False
#os.mkdir(path[, mode]) 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)
#split('/')[-1] filename = url.split('/')[-1] 以‘/ ’为分割f符,保留最后一段
自己命名
import requests
import os
url = "https://img2.baidu.com/it/u=4284204932,2551468984&fm=26&fmt=auto&gp=0.jpg"
path = "C://Users//86171//Desktop/泸溪河.jpg"
#注意不要写成//泸溪河.jpg,不然新建了一个叫泸溪河.jpg的文件夹
try:
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f:
f.write(r.content)
f.close()
print('爬下来了,快去看看吧')
else:
print("already existing")
except:
print("fail")
爬取成功了!
😄还是冰红茶好喝!
4.IP地址自动归属地查询
fail
https://chapangzhan.com/查旁站
''旁站”一般指同一IP或者域名所在服务器的其他网站
import requests
url = "https://chapangzhan.com/"
try:
r = requests.get(url+'202.102.144.56') #我学校官网的IP
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text)
except:
print("fail")
一开始就显示fail,
然而有try和except看不出具体错误,于是把try和except先注释掉,
出现了各种错误
以为是开了代理的原因,然后关了代理,显示这个错误
期间还出现了10064
,10054
这些错误…😢 😢
success
折腾了老久,后来试了一下修改user-agent
,终于成功了✌️
import requests
kv ={'user-agent':'Mozilla/5.0'}
url = "https://chapangzhan.com/"
try:
r = requests.get(url+'202.102.144.56', headers=kv)
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text)
except:
print("fail")
网站一般接收的是由浏览器引发的HTTP请求,而对于爬虫的请求,网站可以拒绝
response对象包含request请求,可以查看r.request.headers,原先是
爬虫告诉了服务器,这次访问是由python的requests库的程序引起的,服务器有来源审查,就可以使访问产生错误(不支持访问)
那么修改头部信息
(
Mozilla/5.0
是一个标准的浏览器标识)
二.遇到的问题
①vscode出问题
在VScode上面运行爬虫,然后没爬成功,显示了conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
于是去搜教程https://blog.csdn.net/chencaw/article/details/89035571
按里面说的添加了三个环境变量
解决了!
②google搜索那里
运行结果中这个网址https://www.google.com/?q=%E7%88%AC%E8%99%AB
打开后是这个页面:
而不是像百度和必应那样直接已经显示搜索结果了…
暂时还不知道为啥,之后再来解决
③爬取图片
为啥用根目录的那种方法只能在这里能找到我的图片
而我的图形界面的桌面上找不到…
而用重命名,直接保存到path的形式,却可以在桌面上找到:
评论区求解答🌸
④IP138
我知道有个IP查询网站是IP138
但为啥我用查旁站https://chapangzhan.com/报错的时候下面会显示
还有,我在查旁站的网页右键,进入检查界面,
为啥那里出现了一个cache.ip138?
这两个网站是啥关系呢🤔🤔
未完待续…问题还没解决😿
以上是关于python爬虫入门的主要内容,如果未能解决你的问题,请参考以下文章