python_爬虫

Requests 库爬虫实例

2021-10-07  本文已影响0人  汪小鱼

实例1:京东商品页面的爬取 http://item.jd.com/2967929.html

import requests
url = "http://item.jd.com/2967929.html" 
try: 
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding 
    print(r.text[:1000]) 
except: 
    print("爬取失败")

r.text 返回的是一个字符串,对于有些网站, 爬下来的字符串很长,没必要全部显示出来,所以用 r.text[:1000] 截取它前 1000 个字符。


实例2:亚马逊商品页面的爬取

import requests
def getHTTPText (url): 
    kv = {'User-agent':'Mozilla/5.0'}
    r = requests.get(url,headers=kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding 
    print(r.text) 
if __name__=='__main__': 
    url = "http://www.amazon.cn/gp/product/B01M8L5Z3Y" 
    getHTTPText(url)

爬虫的请求头:

{'User-Agent': 'python-requests/2.20.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

这样的获取请求很容易被识别,通过 get() 方法和 headers 参数定制 HTTP 请求头。一般连接失败但通过 r.text 仍能获取内容,即可以判定网络部分没有问题。

修改后的请求头:

{'User-agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}


实例3:百度360搜索关键词提交

搜索引擎关键词提交接口
百度的关键词接口:http://www.baidu.com/s?wd=keyword
360的关键词接口:http://www.so.com/s?q=keyword

import requests
url = input('请输入网址>>>')
keyword = input('请输入关键词:')
kv = {'wd': keyword} 
try: 
    r = requests.get(url, params=kv) 
    print('爬取内容网址:', r.request.url)
    r.raise_for_status() 
    print('目标内容的长度:',len(r.text)) 
except: 
    print('爬取失败!')

实例4:网络图片的爬取和存储

网络图片链接的格式:http://www.example.com/picture.jpg

import requests
ch = 'Y' 
path = 'D:/abc.jpg' 
def getJPG(url): 
    r = requests.get(url) 
    with open(path, 'wb') as file: 
        file.write(r.content) 
        print('图片已存入', path) 
while ch=='Y': 
    # (ch=='y')?ch-32:ch 
    url = input('请输入图片地址>>>')
    getJPG(url) 
    print("是否继续爬取(Y/N)?", end='')
    ch = input() 
    if ch=='y': ch = 'Y' 
f.close()

只能存一张图片,因为程序并没有修改文件名。后面的图片会对前面的图片进行覆盖。

import requests 
import os

url = "https://www.ustc.edu.cn/_upload/article/images/e7/ea
/cf814a78401fa7175c3974169316/7ca83638-6e7b-469a-839a-5e15b63ce427.jpg" 
root = "D://pics//" 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('文件已存在') 
except: 
    print('爬取失败!')

实例5:IP地址归属地的自动查询

import requests

url = 'http://www.ip38.com/ip.php?ip=' 
IPaddress = input('请输入IP地址:') 
try: 
    r = requests.get(url + IPaddress)   
    print('目标网站:',r.request.url)
    r.raise_for_status()
    r.encoding = r.appparent_encoding
    print(r.text[-500:]) 
except: 
    print('爬取失败!')

我们在网站上看到的人机交互方式,例如文本框、需要点击按钮的。在正式向后台服务器提交的时候,都是以链接的形式来提交的。我们需要通过浏览器的解析知道向后台提交的链接形式,将人工交互形式转换为我们能够操作的形式。

上一篇下一篇

猜你喜欢

热点阅读