10、爬虫总复习

1、解析与提取(Beautiful、json)

  • 当数据藏匿于网页源代码(BeautifulSoup
    在这里插入图片描述
    手动修改编码类型:response.encoding='xxx'
  • 当数据藏匿于 XHR 中(json
    在这里插入图片描述
  • 总结
    在这里插入图片描述

2、更厉害的请求(get、post、cookies)

  • requests.get() _ 参数params:让我们带着参数来请求数据,如我想要第几页?我想要搜索的关键词?我想要多少个数据?
  • requests.get() _ 参数headers:请求头。
  • get是明文显示参数,post是非明文显示参数。
  • requests.post() _ 参数data:用法和params非常相像。
  • cookies:作用是让服务器“记住你”。
  • 示例代码
import requests
	
# 定义url_1,headers和data
url_1 = 'https://…'
headers = {'user-agent':''}
data = {}
	
login_in = requests.post(url,headers=headers,data=data)
cookies = login_in.cookies
# 完成登录,获取cookies
	
url_2 = 'https://…'
params = {}
# 定义url和params
	
response = requests.get(url,headers=headers,params=params,cookies=cookies)
# 带着cookies重新发起请求

3、存储(csv、openpyxl)

  • csv
    在这里插入图片描述
#csv写入的代码:
import csv
csv_file=open('demo.csv','w',newline='')
writer = csv.writer(csv_file)
writer.writerow(['电影','豆瓣评分'])
csv_file.close()

在这里插入图片描述

#csv读取的代码:
import csv
csv_file=open('demo.csv','r',newline='')
reader=csv.reader(csv_file)
for row in reader:
	print(row)
  • Excel文件
    在这里插入图片描述
#Excel写入的代码:
import openpyxl 
wb=openpyxl.Workbook() 
sheet=wb.active
sheet.title='new title'
sheet['A1'] = '漫威宇宙'
rows= [['美国队长','钢铁侠','蜘蛛侠','雷神'],['是','漫威','宇宙', '经典','人物']]
for i in rows:
    sheet.append(i)
print(rows)
wb.save('Marvel.xlsx')

在这里插入图片描述

#Excel读取的代码:
import openpyxl
wb = openpyxl.load_workbook('Marvel.xlsx')
sheet=wb['new title']
sheetname = wb.sheetnames
print(sheetname)
A1_value=sheet['A1'].value
print(A1_value)

4、更多的爬虫(协程/gevent、queue)

  • gevent
    在这里插入图片描述
    在这里插入图片描述
  • queue模块
    在这里插入图片描述
    在这里插入图片描述
  • 示例代码
import gevent,time,requests
from gevent.queue import Queue
from gevent import monkey
monkey.patch_all()
	
start = time.time()
	
url_list = ['https://www.baidu.com/',
	'https://www.sina.com.cn/',
	'http://www.sohu.com/',
	'https://www.qq.com/',
	'https://www.163.com/',
	'http://www.iqiyi.com/',
	'https://www.tmall.com/',
	'http://www.ifeng.com/']
	
work = Queue()
for url in url_list:
	work.put_nowait(url)
	
def crawler():
	while not work.empty():
		url = work.get_nowait()
		r = requests.get(url)
		print(url,work.qsize(),r.status_code)
	
tasks_list  = [ ]
	
for x in range(2):
	task = gevent.spawn(crawler)
	tasks_list.append(task)
gevent.joinall(tasks_list)
	
end = time.time()
print(end-start)

5、更强大的爬虫(Scrapy框架)

  • Scrapy结构
    在这里插入图片描述
  • Scrapy工作原理
    在这里插入图片描述
  • Scrapy用法
    在这里插入图片描述

6、给爬虫加上翅膀(selenium、邮件/smtplib+email、定时/schedule)

  • selenium
    提取数据的方法:
    在这里插入图片描述
    对象的转换过程:
    在这里插入图片描述
    获取字符串格式的网页源代码:HTML源代码字符串 = driver.page_source
    自动操作浏览器的方法:
    在这里插入图片描述
  • 邮件
    流程:
    在这里插入图片描述
    示例代码:
import smtplib 
from email.mime.text import MIMEText
from email.header import Header
#引入smtplib、MIMEText和Header

mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址应为字符串格式
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以调用SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。
#以上,皆为连接服务器。

account = input('请输入你的邮箱:')
#获取邮箱账号,为字符串格式
password = input('请输入你的密码:')
#获取邮箱密码,为字符串格式
qqmail.login(account,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
#以上,皆为登录邮箱。

receiver=input('请输入收件人的邮箱:')
#获取收件人的邮箱。

content=input('请输入邮件正文:')
#输入你的邮件正文,为字符串格式
message = MIMEText(content, 'plain', 'utf-8')
#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
subject = input('请输入你的邮件主题:')
#输入你的邮件主题,为字符串格式
message['Subject'] = Header(subject, 'utf-8')
#在等号的右边是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message['Subject']。
#以上,为填写主题和正文。

try:
    qqmail.sendmail(account, receiver, message.as_string())
    print ('邮件发送成功')
except:
    print ('邮件发送失败')
qqmail.quit()
#以上为发送邮件和退出邮箱。
  • 定时
    示例代码:
import schedule
import time
#引入schedule和time

def job():
    print("I'm working...")
#定义一个叫job的函数,函数的功能是打印'I'm working...'

schedule.every(10).minutes.do(job)       #部署每10分钟执行一次job()函数的任务
schedule.every().hour.do(job)            #部署每×小时执行一次job()函数的任务
schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
schedule.every().monday.do(job)          #部署每个星期一执行job()函数的任务
schedule.every().wednesday.at("13:15").do(job)#部署每周三的13:15执行函数的任务

while True:
    schedule.run_pending()
    time.sleep(1)    
#15-17都是检查部署的情况,如果任务准备就绪,就开始执行任务。

7、爬虫进阶路径指引

  • 解析与提取
    解析库 xpath / lxml
    正则表达式( re 模块)
  • 存储
    MySQL库 、MongoDB
    SQL语言
  • 数据分析和可视化
    模块与库 Pandas / Matplotlib / Numpy / Scikit-Learn / Scipy
  • 更多的爬虫
    多进程( multiprocessing 库)
  • 更强大的爬虫-框架
    Scrapy模拟登录存储数据库使用HTTP代理分布式爬虫
    PySpider框架
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值