爬虫入门学习(1)

常用模块:

import requests
import lxml
import urllib
from lxml import etree
from bs4 import BeautifulSoup

模块安装:

pip install requests
pip install lxml
pip install bs4

案例1:
import requests
#指定url
url = 'https://www.sogou.com/'
#发起请求 get方式返回值为响应对象
response = requests.get(url)
#获取响应数据
#text是返回字符串形式的响应数据,
#其他格式还有json()将获取的字符串形式的数据转换成字典
#content()返回的是二进制形式的响应数据
page_text = response.text
#数据存储
with open('sougou.html', 'w', encoding='utf-8') as fp:
    fp.write(page_text)
案例2:
#get请求 带入参 
import requests
keyWord = input('enter a key word:')
#增加user_agent模拟浏览器 规避反扒机制
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
}
params = {
    'query':keyWord
}
url = 'https://www.sogou.com/web'
response = requests.get(url=url,params=params,headers=headers)
#设置编码格式
response.encoding = 'utf-8'
page_text = response.text
filename = keyWord + '.html'
with open (filename,'w',encoding='utf-8') as fp:
    fp.write(page_text)
案例3:
#豆瓣电影评分
import requests

# url = 'https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='
url = 'https://movie.douban.com/j/chart/top_list'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
    }
#参数内容可以做修改
params = {
    'type': 5,
    'interval_id': '100:90',
    'action': '',
    'start': 0,
    'limit': 20
}
response = requests.get(url=url,params=params,headers=headers)

#json  将获取的字符串形式的数据转换成字典
page_text = response.json()
for movie in page_text:
    name = movie['title']
    score = movie['score']
    print(name,score)
    
'''
动态加载
    我们使用requests模块爬取数据 无法每次都实现可见即可得
    有些数据是通过非浏览器地址栏url请求到的数据,而是其他请求到的数据,那么这些通过其他请求到的数据就是动态加载的数据
    
如何检测网页存在动态加载
    通过抓包工具范围搜索
如何获取动态加载数据
    全局搜索
    
思考:
    基于抓包工具进行全局搜索不一定可以每次都能定位到动态加载数据对应的数据包?
    如果动态加载的数据是经过加密的密文数据
'''
案例4:
#分页爬取
import requests
# url = 'http://www.kfc.com.cn/kfccda/storelist/index.aspx'
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
    }
#多页操作  修改pageSize值  或者修改pageIndex值
for page in range(1,10):

    data = {
        'cname': '安庆',
        'pid': '',
        'keyword': '安庆',
        'pageIndex': str(page),
        'pageSize': '10'
    }
    response = requests.post(url=url,headers=headers,data=data)
    response = response.json()
    for adds in response['Table1']:
        print(adds['storeName'],adds['addressDetail'])
'''
分析:
在录入关键字的文本框中录入关键字按下搜索按钮,发起的是一个ajax请求
    当前页面刷新出来的数据信息一定是通过ajax请求请求到的数据
基于抓包工具定位到的ajax请求的数据包获取对应的数据信息
    url
    method
    data
    response
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值