Requests 库爬虫实例
实例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('爬取失败!')
我们在网站上看到的人机交互方式,例如文本框、需要点击按钮的。在正式向后台服务器提交的时候,都是以链接的形式来提交的。我们需要通过浏览器的解析知道向后台提交的链接形式,将人工交互形式转换为我们能够操作的形式。