爬取搜狗首页页面数据
import urllib.request
# 1.指定url
url = r'https://www.sogou.com/'
# 2.发起请求
# urlopen()参数内部可以指定填写url,且返回一个函数对象
res = urllib.request.urlopen(url=url)
# 3.获取页面数据
# 响应对象中会获取存储的数据,read()函数中返回的就是响应对象存储的页面数据
page_text = res.read()
print(page_text)
# 4.持久化存储
with open('./sogou.html', 'wb') as fp:
    fp.write(page_text)
    print('写入数据成功')

爬取指定词条数据
import urllib.request
import urllib.parse
# 1.指定url
url = r'https://www.sogou.com/web?query='
# 2.发请求 url中不可以存在ascii码的字符数据,否则就会报错,这里需要对中文进行转码和拼接后才能进行处理
word = urllib.parse.quote('人民币')
url = url+word
res = urllib.request.urlopen(url=url)
# print(word)
# 3.获取页面数据(二进制的页面数据)
page_text = res.read()
print(page_text)
# 4.持久化存储
with open('./renminbi.html', 'wb') as f:
    f.write(page_text)
    print('写入数据成功')

伪装UA
import urllib.request
url = 'http://www.baidu.com/'
# UA伪装
# 1.自制定一个请求对象
headers = {
#     存储任意的请求头信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
# 该请求对象进行了成功的伪装
req = urllib.request.Request(url=url, headers=headers)
# 2.针对自制定的请求对象发起请求
res = urllib.request.urlopen(req)
print(res.read())

爬取百度翻译的结果
import urllib.request
import urllib.parse
# 1.制定url
url = 'https://fanyi.baidu.com/sug'
# post请求所携带的参数处理流程
# 1.将请求参数封装到字典中
data = {
    'kw': '西瓜',
}
# 2.使用parse中的url encode进行编码处理
data = urllib.parse.urlencode(data)
 
# 3.将步骤2的编码结果转换为byte类型
data = data.encode()
 
# 2.发起post请求
# urlopen中的data表示的就是经过处理之后的post的请求参数
req = urllib.request.urlopen(url=url, data=data)
# print(req.read())
with open('./百度翻译.txt', 'wb') as fp:
    fp.write(req.read())

request发起get请求
# 爬取搜狗首页的数据
import requests
# 1.指定url
url = 'https://www.sogou.com/'
# 2.发起get请求
res = requests.get(url=url)
# 3.获取响应中的数据值
# text获取相应页面中的字符串形式
page_data = res.text
# print(page_data)
# 4.持久化操作
with open('./sougou.html', 'w', encoding='utf-8') as fp:
    fp.write(page_data)

response其他重要属性
# 爬取搜狗首页的数据
import requests
# 1.指定url
url = 'https://www.sogou.com/'
# 2.发起get请求
res = requests.get(url=url)
# 3.获取响应中的数据值
# content获取的是response对象中的byte类型的页面数据
# print(res.content)
# status_code表示网页的响应状态码,返回响应状态码,查属性的结果,响应成功或失败
# print(res.status_code)
# 获取响应头信息(字典的形式)
# print(res.headers)
# 获取的是响应对象中的url,获取请求的url,返回的是请求中指定的url
# print(res.url)

处理携带参数的get请求
# 获取搜狗搜索结果对应页面数据
import requests
url = 'https://www.sogou.com/web?query=周杰伦&ie=utf-8'
 
res = requests.get(url=url)
 
# print(res.text)
 
with open('./Jay.html', 'w', encoding='utf-8') as fp:
    fp.write(res.text)
 

处理携带参数的get请求2
# 获取搜狗搜索结果对应页面数据
import requests
 
url = 'https://www.sogou.com/web'
# 将参数封装到字典中
params = {
    'query': '周杰伦',
    'ie': 'utf-8',
}
res = requests.get(url=url, params=params)
 
# print(res.text)
 
with open('./Jay2.html', 'w', encoding='utf-8') as fp:
    fp.write(res.text)

request模块的post请求
# 登录豆瓣网,获取登陆成功后的页面数据
import requests
# 指定url
url = 'https://accounts.douban.com/login'
# 封装post请求的参数
data = {
'source': 'movie',
'redir': 'https://movie.douban.com/',
'form_email': 'a873245193@sina.com',
'form_password': 'dota2009',
'login': '登录'
}
headers = {
#     存储任意的请求头信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
# 发起post请求
req = requests.post(url=url, data=data, headers=headers)
# 3.获取响应对象中的页面数据
page_text = req.text
# 4.持久化操作
with open('./douban.html', 'w', encoding='utf-8') as fp:
    fp.write(page_text)
 

requests模块ajax的get请求
import requests
 
url = 'https://movie.douban.com/j/chart/top_list?'
# 封装ajax中get请求携带的参数
params = {
    'type': '13',
    'interval_id': '100:90',
    'action': '',
    'start': '0',
    'limit': '2000',
}
headers = {
    #     存储任意的请求头信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
req = requests.get(url=url, params=params, headers=headers)
print(req.text)
 

requests模块处理ajax的post请求
 
# 爬取肯德基餐厅的位置数据
import requests
 
# 1.指定url
post_url = r'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
# 2.处理post请求的参数
data = {
    'cname': '',
    'pid': '',
    'keyword': '江苏',
    'pageIndex': '1',
    'pageSize': '10',
}
headers = {
    #     存储任意的请求头信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
req = requests.post(url=post_url, data=data, headers=headers)
print(req.text)

request模块综合练习
import requests
# 爬取搜狗、知乎某一个词条对应的一定范围表示的页面数据
# 获取前3页页面数据
# 1.指定url
url = 'https://zhihu.sogou.com/zhihu'
params = {
    'query': '人工智能',
    'page':'6',
    'ie':'utf8',
}
headers = {
    #     存储任意的请求头信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
req = requests.get(url=url, params=params, headers=headers)
# print(req.text)
with open('./人工智能.html', 'w', encoding='utf-8') as fp:
    fp.write(req.text)

request模块的cookie操作
# cookie
# 基于用户的数据
# 爬取豆瓣网的个人主页页面数据
# cookie作用,服务端使用cookie来记录客户端的状态信息
# 1.执行登录操作
# 2.发起个人请求主页请求时,需要将cookie携带到该请求中
# session也可以使用来发起请求,该cookie对象会自动存储在session中
import requests
 
session = requests.session()
login_url = 'https://www.douban.com/accounts/login'
data = {
    'source': 'movie',
    'redir': 'https://movie.douban.com/',
    'form_email': 'a873245193@sina.com',
    'form_password': 'dota2009',
    'login': '登录',
}
headers = {
    #     存储任意的请求头信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
res = session.post(url=login_url, data=data, headers=headers)
print(res.text)
with open('./dou.html', 'w', encoding='utf-8') as fp:
    fp.write(res.text)
 

requests模块的代理操作
# -代理操作,使用第三方代替本体去操作事务
# -为什么要使用代理?
# 反爬操作有关联
# 设置代理ip防止门户网站封禁ip,使用代理是一种反反爬的手段
# 代理分类
# -正向代理 代替客户端获取数据
# -反向代理 代替服务器端提供数据
# 4.免费代理ip的网站提供商
# -www.goubanjia.com
# -快代理
# -西祠代理

正则回顾
# 数据解析
# 1.指定url
# 2.发起请求
# 3.获取页面数据
# 4.数据解析
# 5.进行持久化存储
# 大多数页面都是聚焦爬取指定的内容,就需要就行数据解析
# 1.正则解析
# 2.bs4
# 3.xpath解析
# +----------------------------------------------+
# 正则表达式练习
import re
# 1.提取python
# key = "javapythonc++php"
# text = re.findall('python', key)
# print(text)
# 2.提取hello world
# key = "<html><h1>hello world</h1></html>"
# text = re.findall("<h1>(hello world)</h1>", key)[0]
# print(text)
# 3.提取170
# string = '我喜欢身高170的女孩'
# text = re.findall('\d+', string)[0]
# print(text)
# 4.提取http://和https://
# key = 'http://www.baidu.com and https://boob.com'
# text = re.findall('http://|https://', key)
# print(text)
# 5.提取hit.
# key = 'bobo@hit.edu.com'
# text = re.findall('@(hit).', key)[0]
# text1 =re.findall('h.*?\.', key)   #贪婪模式,尽可能多的匹配,加问号就是切换为非贪婪模式
# print(text1)
# 6.匹配sas和saas
# key = 'saas and sas and saaas'
# text = re.findall('sa{1,2}s', key)
# print(text)
# 7.匹配出i开头的行
# re.M  作用在多行处 re.S 作用于单行处
# string = '''fall in love with you
# i love you much
# i love she
# i love her
# '''
# text = re.findall('^i.*', string, re.M)
# print(text)
# 8.匹配全部行
# string = '''<div>静夜思
# 床前明月光
# 疑是地上霜
# 举头望明月
# 低头思故乡
# </div>
# '''
# text = re.findall('<div>.*</div>', string, re.S)
# print(text)

正则解析项目演练
None
自定义请求头信息
import requests
# 自定义请求头信息
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                  'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}
 
 
url = 'https://www.sogou.com/web'
# 将参数封装到字典中
params = {
    'query': '周杰伦',
    'ie': 'utf-8',
}
res = requests.get(url=url, params=params, headers=headers)
 
# print(res.text)
 
with open('./Jay3.html', 'w', encoding='utf-8') as fp:
    fp.write(res.text)

xpath表达式回顾
# 1.下载lxml插件
# 2.导入包 from lxml import etree
# 3.创建etree,指定数据的解析
# -如果解析的数据源来源是本地的话,就需要etree.parse('本地文件路径)
#     -etree.xpath('xpath表达式')
# -数据来源是来自网络的形式 etree=etree.HTML('网络请求到的数据')
from lxml import etree
tree = etree.parse(r'F:\爬虫专用\text.html')
# 属性定位:根据指定的属性定位到指定的节点标签
print(tree.xpath("//div[@class='song']"))
# 层级索引定位
print(tree.xpath("//div[@class='tang']/ul/li[2]/a"))
# 逻辑定位
print(tree.xpath("//a[@href='' and @class='du']"))
print(tree.xpath("//div[contains(@class, 'ng')]"))
# 模糊匹配
print(tree.xpath("//div[starts-with(@class, 'ta')]"))
# 取文本
print(tree.xpath("//div[@class='song']/p[1]/text()"))

xpath插件
# xpath插件可以直接将xpath的表达式作用于浏览器的网页当中
# 需要在谷歌浏览器中使用一个插件

xpath项目演练
# 使用xpath对段子网中的段子内容和标题进行爬取
# 进行持久化存储
import requests
from lxml import etree
 
# 1.指定url
url = 'https://ishuo.cn/joke'
# 2.发起请求
headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 "
                  "(KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
}
res = requests.get(url=url, headers=headers)
 
# 3.获取页面内容
page_text = res.text
# print(page_text)
# 4.数据解析
tree = etree.HTML(page_text)
# 获取所有的li标签
li_list = tree.xpath("//div[@id='list']/ul/li")
# print(tree.xpath("//div[@id='list']/ul/li"))
fp = open('./duanzi.txt', 'w', encoding='utf-8')
for li in li_list:
    content = li.xpath("./div[@class='content']/text()")[0]
    title = li.xpath("./div[@class='info']/a/text()")[0]
    # print(title)
    # 5.持久化存储
    fp.write(title + ':' + content + '\n\n')
print('数据写入成功')

bs4基础使用
# beautifulsoup是python中独有的一种解析方式
# 使用的时候更加的简单便捷和高效
# 代码的使用流程
# 可以将html的文档转换为beautifulsoup的一个对象
# 调用对象的一些属性,对指定内容的一个定位于查找
from bs4 import BeautifulSoup
 
# 创建对象
#     如果html的本地来源是本地的话,Beautiful(open('文件'),'lxml')
#     如果html的来源是来自网络的,Beautiful('网络请求的数据','lxml')
# 属性和方法
fp = open(r'F:\爬虫专用\text.html', 'r', encoding='utf-8')
soup = BeautifulSoup(fp, 'lxml')
# print(soup)
# 根据标签名称进行查找
# print(soup.find('div'))
# 获取标签的属性值
# print(soup.a.attrs)
# 获取指定的属性值
# 获取的文本内容
# print(soup.p.text)
# 获取其他的内容
# print(soup.find('div', {'class': 'song'}))
tag_name = soup.find('div', {'class': 'song'}).find_all('p')
for tag in tag_name:
    print(tag.text)

bs4项目演练
# 爬取古诗文网中的部分内容
import requests
from bs4 import BeautifulSoup
 
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 "
                  "(KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
}
 
 
def get_content(url):
    content_page = requests.get(url=url, headers=headers).text
    soup = BeautifulSoup(content_page, 'lxml')
    content_text = soup.find('div', {'class': 'chapter_content'}).text
    return content_text
 
 
page_text = requests.get(url=url, headers=headers).text
soup = BeautifulSoup(page_text, 'lxml')
# print(soup.text)
te = soup.select('.book-mulu > ul > li > a')
# print(te)
for a in te:
    # 获取了章节的标题
    title = a.string
    content_url = 'http://www.shicimingju.com' + a['href']
    # print(title)
    con = get_content(content_url)
    print(con)

scrapy简介和基础使用01
# scrapy框架:
#     1.框架的简介和基础应用
#     2.持久化存储
#     3.代理和cookie
#     4.日志和请求传参
#     5.CrawlSpider
#     6.基于redis的分布式爬虫
# ===========================================
# 一、scrapy框架的简介和基础应用
# 1.概念:为了爬取网站数据而编写的一款应用框架、出名且强大
# 所谓的框架就是集成了相应的功能且具有很强通用性的项目模板(高性能的异步下载功能),可以开启多个异步进程,高性能持久化存储

scrapy简介和基础使用02
# 1.创建一个工程
# >>>scrapy startproject project_name
# 2.在工程目录下创建一个爬虫文件
# 3.对应的文件中编写爬虫程序来完成爬虫的操作
# 4.配置文件的编写
# 5.执行
# scrapy crawl 爬虫文件的名称(--nolog指的是阻止日志信息的输出)
# ====================================================
# scrapy.cfg 项目的主配置信息,真正的爬虫的配置信息是配置在settings.py文件中
# items.py 设置数据存储模板,用于数据化结构,像django的model
# pipelines.py 数据持久化处理
# settings.py 配置文件,如递归的层数,并发数,延迟下载等
#     1.对请求载体进行配置
#     2.不遵循robots.txt协议
# spiders 爬虫目录创建文件,爬虫的编写规则等

scrapy简介和基础使用03
# 爬虫页面的解析操作
# -需求:爬取糗事百科中段子的内容和段子的作者
# 1.创建一个工程项目scrapy startproject qiubai
#

基于终端指令的持久化存储
# 1.持久化存储
#     存储在磁盘文件中
#         基于终端指令的数据存储
#             保证parse方法返回一个可迭代的类型对象(存储解析到的页面内容)
#             使用终端指令完成数据存储到指定磁盘文件中的操作
#         基于管道的数据存储

基于管道的持久化存储
# items文件
# pipelines文件
# items表示的是数据存储的模板式文件
# pipelines文件处理持久化存储的相关操作
# 代码实现的流程
# 1.先将解析到的页面数据存储到items对象中
# 2.使用yield关键字将items对象提交给管道处理,yield可以提交关键字进行处理
# 3.在管道文件中编写代码完成数据存储的操作
# 4.在配置文件中开启管道的操作
#

 
 
 
 
 
 
 
 
 
 
 
 
 
 

路飞学城Python-Day152的更多相关文章

  1. 路飞学城—Python爬虫实战密训班 第三章

    路飞学城—Python爬虫实战密训班 第三章 一.scrapy-redis插件实现简单分布式爬虫 scrapy-redis插件用于将scrapy和redis结合实现简单分布式爬虫: - 定义调度器 - ...

  2. 路飞学城—Python爬虫实战密训班 第二章

    路飞学城—Python爬虫实战密训班 第二章 一.Selenium基础 Selenium是一个第三方模块,可以完全模拟用户在浏览器上操作(相当于在浏览器上点点点). 1.安装 - pip instal ...

  3. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  4. 路飞学城-Python开发集训-第3章

    学习心得: 通过这一章的作业,使我对正则表达式的使用直接提升了一个level,虽然作业完成的不怎么样,重复代码有点多,但是收获还是非常大的,有点找到写代码的感觉了,遗憾的是,这次作业交过,这次集训就结 ...

  5. 路飞学城-Python开发集训-第1章

    学习体会: 在参加这次集训之前我自己学过一段时间的Python,看过老男孩的免费视频,自我感觉还行,老师写的代码基本上都能看懂,但是实际呢?....今天是集训第一次交作业的时间,突然发现看似简单升级需 ...

  6. 路飞学城-Python开发集训-第4章

    学习心得: 学习笔记: 在python中一个py文件就是一个模块 模块好处: 1.提高可维护性 2.可重用 3.避免函数名和变量名冲突 模块分为三种: 1.内置标准模块(标准库),查看所有自带和第三方 ...

  7. 路飞学城-Python开发集训-第2章

    学习心得: 这章对编码的讲解超级赞,现在对于编码终于有一点认知了,但还没有大彻大悟,还需要更加细心的琢磨一下Alex博客和视频,以前真的是被编码折磨死了,因为编码的问题而浪费的时间很多很多,现在终于感 ...

  8. 路飞学城-Python开发-第二章

    ''' 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家' ...

  9. 路飞学城-Python开发-第三章

    # 数据结构: # goods = [ # {"name": "电脑", "price": 1999}, # {"name&quo ...

  10. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

随机推荐

  1. react 父组件 向 子组件 传值

    父组件 import React, { Component } from 'react'; import Test from './component/test'; //声明welcome组件 cla ...

  2. SBC37x交叉编译平台QT+OPENCV【1】

    在win7下安装Vbox虚拟机,然后安装Ubuntu10.04版本.上一篇说了根据厂商提供的编译器进行安装. 接下来要说的的环境准备.因为在Linux下对u盘的识别以及目录的共享,还有代码的编译传送运 ...

  3. Linux查看文件内容命令:less(转)

    less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件. 语法 less [参数] 文件 参数说明: -b <缓冲 ...

  4. 基于ffmpeg和libvlc的视频剪辑、播放器

    以前研究的时候,写过一个简单的基于VLC的视频播放器.后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放.视频加减速.视频剪切,视频合并(增加中)等功能在一起.有时候 ...

  5. POJ 2375

    BFS+强连通.输出max(缩点后出度为0的点数,缩点后入度为0的点数). #include <cstdio> #include <iostream> #include < ...

  6. 当前插入的线段能完整覆盖存在的几条线段 树状数组 HDU 5372 Segment Game

    http://acm.hdu.edu.cn/showproblem.php? pid=5372 Segment Game Time Limit: 3000/1500 MS (Java/Others)  ...

  7. 例题 2-1 aabb 2-2 3n+1问题

    例题2-1  aabb 输出全部形如aabb的四位全然平方数(即前两位数字相等,后两位数字也相等) #include <stdio.h> #include <stdlib.h> ...

  8. Webx框架:Spring Schema 和 Spring Ext

    webx诞生的原因是当时市面上没有好用的web框架.如今的Web框架有非常多.然后它们背后的思想都是相似的,并且越来越趋同. Spring Schema 在传统的spring中,配置bean时须要手动 ...

  9. Android之——ContentProvider操作XML

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47682559 不多说,不废话,直接上代码,大家一看都懂得 /** * Conten ...

  10. iOS开发之获取沙盒路径

    iOS开发之沙盒机制(SandBox)具体解说了沙盒的一些机制.在开发中,我们须要对沙盒进行操作.所以我们须要获取到沙盒路径. 沙盒里的目录包含Documents.Library.tmp.这三个目录的 ...