python 爬虫学习笔记1
requests模块 - urllib模块 - requests模块 requests模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。 作用:模拟浏览器发请求。 如何使用:(requests模块的编码流程) - 指定url - UA伪装 - 请求参数的处理 - 发起请求 - 获取响应数据 - 持久化存储 环境安装: pip install requests 实战编码: - 需求:爬取搜狗首页的页面数据 实战巩固 - 需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器) - UA检测 - UA伪装 - 需求:破解百度翻译 - post请求(携带了参数) - 响应数据是一组json数据 - 需求:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 - 作业:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据 - 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据 http://125.35.6.84:81/xk/ - 动态加载数据 - 首页中对应的企业信息数据是通过ajax动态请求到的。 http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=e6c1aa332b274282b04659a6ea30430a http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=f63f61fe04684c46a016a45eac8754fe - 通过对详情页url的观察发现: - url的域名都是一样的,只有携带的参数(id)不一样 - id值可以从首页对应的ajax请求到的json串中获取 - 域名和id值拼接处一个完整的企业对应的详情页的url - 详情页的企业详情数据也是动态加载出来的 - http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById - http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById - 观察后发现: - 所有的post请求的url都是一样的,只有参数id值是不同。 - 如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url 数据解析: 聚焦爬虫 正则 bs4 xpath
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import re
import os
#需求:爬取糗事百科中糗图板块下所有的糗图图片
if __name__ == "__main__":
#创建一个文件夹,保存所有的图片
if not os.path.exists('./qiutuLibs'):
os.mkdir('./qiutuLibs')
url = 'https://www.qiushibaike.com/pic/'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
#使用通用爬虫对url对应的一整张页面进行爬取
page_text = requests.get(url=url,headers=headers).text
#使用聚焦爬虫将页面中所有的糗图进行解析/提取
ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'
img_src_list = re.findall(ex,page_text,re.S)
# print(img_src_list)
for src in img_src_list:
#拼接出一个完整的图片url
src = 'https:'+src
#请求到了图片的二进制数据
img_data = requests.get(url=src,headers=headers).content
#生成图片名称
img_name = src.split('/')[-1]
#图片存储的路径
imgPath = './qiutuLibs/'+img_name
with open(imgPath,'wb') as fp:
fp.write(img_data)
print(img_name,'下载成功!!!')
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import requests 5 import json 6 if __name__ == "__main__": 7 headers = { 8 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' 9 10 } 11 id_list = [] # 存储企业的id 12 all_data_list = [] # 存储所有的企业详情数据 13 #批量获取不同企业的id值 14 url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' 15 #参数的封装 16 for page in range(1,6): 17 page = str(page) 18 data = { 19 'on': 'true', 20 'page': page, 21 'pageSize': '15', 22 'productName':'', 23 'conditionType': '1', 24 'applyname':'', 25 'applysn':'', 26 } 27 json_ids = requests.post(url=url,headers=headers,data=data).json() 28 for dic in json_ids['list']: 29 id_list.append(dic['ID']) 30 31 #获取企业详情数据 32 post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' 33 for id in id_list: 34 data = { 35 'id':id 36 } 37 detail_json = requests.post(url=post_url,headers=headers,data=data).json() 38 # print(detail_json,'-------------ending-----------') 39 all_data_list.append(detail_json) 40 41 #持久化存储all_data_list 42 fp = open('./allData.json','w',encoding='utf-8') 43 json.dump(all_data_list,fp=fp,ensure_ascii=False) 44 print('over!!!')