python爬虫入门

Posted 临风而眠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python爬虫入门相关的知识,希望对你有一定的参考价值。

python爬虫入门(2)

​ Requests库实操

一.实例

1.爬取京东热带风味冰红茶

img

在这破防的考试周,我们先来爬取一下超级美味的热带风味吧!

真的破防了啊!何以解忧,唯有红茶!呜呜呜😭😭😭

​ 爬取它

image-20210630152026014
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")

运行结果:

爬取成功!

image-20210630152140021

2.百度搜索关键词提交

​ 百度一下,你就知道👆image-20210708200707617当我们进行百度搜索的时候,会发生什么?👀

其实,搜索引擎都有关键词提交接口

<--百度的关键词接口-->
http://www.baidu.com/s?wd=keyword

那么只要用requests库构造一个符合百度接口的url就可以了

前面说过image-20210708202556653

那么根据关键词提交接口,我们就构造如下键值对

{'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查看

搜索引擎智能提示 各大搜索引擎智能API

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")

爬取成功了!

Desktopu=4284204932,2551468984&fm=26&fmt=auto&gp=0

😄还是冰红茶好喝!

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先注释掉,
出现了各种错误

image-20210709102352080

以为是开了代理的原因,然后关了代理,显示这个错误

image-20210709103739059

期间还出现了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,原先是image-20210709105221770

爬虫告诉了服务器,这次访问是由python的requests库的程序引起的,服务器有来源审查,就可以使访问产生错误(不支持访问)

那么修改头部信息

image-20210709105004666

Mozilla/5.0是一个标准的浏览器标识)

二.遇到的问题

①vscode出问题

​ 在VScode上面运行爬虫,然后没爬成功,显示了conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

image-20210704171415575

​ 于是去搜教程https://blog.csdn.net/chencaw/article/details/89035571

​ 按里面说的添加了三个环境变量

image-20210704171433856

解决了!

②google搜索那里

​ 运行结果中这个网址https://www.google.com/?q=%E7%88%AC%E8%99%AB

​ 打开后是这个页面:

image-20210708212008125

​ 而不是像百度和必应那样直接已经显示搜索结果了…

​ 暂时还不知道为啥,之后再来解决

③爬取图片

​ 为啥用根目录的那种方法只能在这里能找到我的图片

image-20210708214757463

image-20210708214910658

而我的图形界面的桌面上找不到…

​ 而用重命名,直接保存到path的形式,却可以在桌面上找到:image-20210708221606283

​ 评论区求解答🌸

④IP138

​ 我知道有个IP查询网站是IP138

​ 但为啥我用查旁站https://chapangzhan.com/报错的时候下面会显示

image-20210709102853134

​ 还有,我在查旁站的网页右键,进入检查界面,

image-20210709102944450

​ 为啥那里出现了一个cache.ip138?

​ 这两个网站是啥关系呢🤔🤔

​ 未完待续…问题还没解决😿

以上是关于python爬虫入门的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫入门

如何入门 Python 爬虫?

python网络爬虫入门

python爬虫入门

如何入门 Python 爬虫

python爬虫如何入门