注:本文仅是个人的学习笔记,内容来源于中国大学mooc《Python网络爬虫与信息提取》课程
一 京东商品页面爬取
import requests url = "https://item.jd.com/16392426155.html" try: r = requests.get(url) r.raise_for_status()#检查访问信息的状态码,200表示正确 r.encoding = r.apparent_encoding#将编码改为可以显示的编码 print(r.text[:1000]) except: print("爬取失败")
二 亚马逊商品页面的爬取
1 用一个字典kv保存需要修改的头部信息。
2 获取头部信息:
>>> r.request.headers {'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
3 访问url时,修改头部信息
import requests url = "https://www.amazon.cn/dp/B074JV6Y48/ref=gwgfloorv1_BMVD_a_0?pf_rd_p=0e393420-91cc-445c-be7c-6f0361fc9c40&pf_rd_s=desktop-8&pf_rd_t=36701&pf_rd_i=desktop&pf_rd_m=A1AJ19PSB66TGU&pf_rd_r=M20Y5N4VVMJD20QCQZNY&pf_rd_r=M20Y5N4VVMJD20QCQZNY&pf_rd_p=0e393420-91cc-445c-be7c-6f0361fc9c40" try: kv = {'user-agent':'Mozilla/5.0'} #请求头 r = requests.get(url,headers = kv) #将请求头修改为kv r.raise_for_status() r.encoding = r.apparent_encoding print(r.text[:2000]) except: print("爬取失败")
三 百度/360搜索关键词提交
字典kv用于保存需要查找到keywords
import requests try: kv = {'wd':'Python'} r = requests.get('http://www.baidu.com/s',params = kv) print(r.request.url) r.raise_for_status() print(len(r.text)) except: print("爬虫失败")
四 网络图片的爬取和存储
网络图片链接格式:
http://www.example.com/picture.jpg
选择国家地理的一张图片url作为对象。
import requests path = "D://abc.jpg"#保存的路径 url = "http://img0.dili360.com/rw9/ga/M01/48/3C/wKgBy1kj49qAMVd7ADKmuZ9jug8377.tub.jpg" r = requests.get(url) with open(path,'wb') as f: f.write(r.content)#response对象的content属性:以二进制的方式写入文件 f.close()
代码优化:
引入os库
import requests import os url = "http://img0.dili360.com/rw9/ga/M01/48/3C/wKgBy1kj49qAMVd7ADKmuZ9jug8377.tub.jpg" root = "D://pic//" path = root + url.split('/')[-1]#分割url并以列表形式保存,取列表最后一位 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("爬取失败")
五 IP地址自动查询
import requests url = "http://m.ip138.com/ip.asp?ip=" try: r = requests.get(url) r.raise_for_status r.encoding = r.apparent_encoding print(r.text[-5000:])#抓取ip地址对应网页的后5000个字符 except: print("爬虫失败")