爬虫

一 . 爬虫的基本信息

  概念:

爬虫:通过编写程序模拟浏览器上网,然后让其去互联网上爬取/获取数据的过程

  分类:

-- 分类(使用场景)(主要下面三种其他分类不用看)
    -通用爬虫(爬取一整张页面数据,'抓取系统')
    -聚焦爬虫(爬取页面中指定内容,前提是爬取一整张数据)
    -增量式数据(用来 检测 网站数据更新情况,只爬取网站最新更新的数据)

  机制:

反爬机制(网站制定了相关的手段或者策略阻止爬虫程序进行网页数据的抓取)
反反爬策略(爬虫破解网站指定的反爬策略)

--反爬机制
    -robots协议:
        -防君子不防小人(你要遵守就有用,不遵守协议可以爬)

  模块:

requests
    -环境安装 pip install requests
    -作用:模拟浏览器发请求
    -编码流程:1.指定url
             2.发起请求
             3.获取响应数据
             4.持久化存储

二 . 示例

  先来一个简简单单的小例子

# 爬取搜狗首页数据,按照编码流程写
import requests

# 1.获取url
url = "https://www.sogou.com/"

# 2,发起请求,get方法的返回值就是一个相应对象
response = requests.get(url=url, verify=False)  # 有的不用写verify

# 3,获取响应数据,text是字符串形式的相应数据
page_text = response.text
# print(page_text)

# 4,持久化存储(应该存到数据库中,)
with open('./sogou.html', 'w', encoding='utf-8') as f:
    f.write(page_text)

  案例2:

import requests

url = 'https://www.sogou.com/web'
# 处理url请求的参数
wd = input('enter a word:')
param = {
    'query': wd
}
# 去浏览器请求头中找
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/70.0.3538.110 Safari/537.36
' } response = requests.get(url=url, params=param, verify=False, headers=headers) # get请求的时候参数是params # 设置响应数据的编码,防止有乱码 response.encoding = 'utf-8' # 3,获取响应数据,text是字符串形式的相应数据 page_text = response.text # 持久化存储 name = wd + '.html' with open(name, 'w', encoding='utf-8') as f: f.write(page_text) # 这里就遇到了反爬机制UA检测,User-Agent # 解决策略,UA伪装

  案例3:

# 百度翻译

# 页面中有可能存在动态加载的数据

import requests

wd = input('enter a English word:')
url = 'https://fanyi.baidu.com/sug'
data = {
    'kw': wd
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/70.0.3538.110 Safari/537.36
' } response = requests.post(url=url, data=data, headers=headers, verify=False) # post请求的参数是data # 前提响应数据必须是json obj_json = response.json() print(obj_json)

  

  案例4:

# 爬取豆瓣电影中的电影详情数据

import requests

url = 'https://movie.douban.com/j/chart/top_list'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/70.0.3538.110 Safari/537.36
' } param = { 'type': '5', 'interval_id': '100:90', 'action': '', 'start': '0', 'limit': '20' } obj_json = requests.get(url=url, headers=headers, params=param, verify=False).json() print(obj_json) # 注意:页面中有些情况会包含动态加载的数据,比如下拉才会出来,这是ajax请求,在network中的XHR中

  

  案例4:

# 爬取化妆品生产许可信息管理平台信息 http://125.35.6.84:81/xk/
# 企业详情页中的详情数据也是动态加载出来的,详情页也是通过ajax请求(url:域名都一样,只不过是携带的参数(id)不一样)到的(企业的详情信息)
import requests url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/70.0.3538.110 Safari/537.36
' } IDs = [] all_data = [] # 就要前三页数据 for page in range(1, 4): data = { 'on': 'true', 'page': str(page), 'pageSize': '15', 'productName': '', 'conditionType': '1', 'applyname': '', 'applysn': '', } # 首页ajax请求返回的响应数据 json_obj = requests.post(url=url, headers=headers, verify=False, data=data).json() for dic in json_obj['list']: ID = dic['ID'] IDs.append(ID) for id in IDs: detail_post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' data = { 'id': id } detail_dic = requests.post(url=detail_post_url, headers=headers, data=data, verify=False).json() all_data.append(detail_dic) # print(all_data)

 

 

 

 

posted @ 2019-05-09 21:26  一个很善良的抱爱  阅读(165)  评论(0编辑  收藏  举报