Python爬虫

网络爬虫与信息提取

requests库入门

安装方法

pip install requests
在这里插入图片描述
requests.get(url,params=None,**kwargs)
url:拟获取页面的URL链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问参数
response对象的属性

爬去网页的代码框架

reques库的异常
在这里插入图片描述

HTTP协议和requests库

HTTP协议,超文本传输协议 基于请求与响应模式的、无状态的应用层协议。
HTTP协议,采用URL作为定位网络资源的标识。
URL格式:http://host[:port][path]

  • host:合法的Internet主机域名或者IP地址
  • port:端口号,缺省为80
  • path:请求资源的路径
    HTTP协议对资源的操作
    requests.request(method,url,**kwargs)
  • method:请求方法,对应get/put/post等7种
  • url:拟获取页面的url链接
  • **kwargs:控制访问的参数,共13个
    • params:字典或字节序列,作为参数增加到url中
    • data:字典、字节序列活文件对象,作为request的内容
    • json:JSON格式的数据,作为request的内容
    • headers:字典,HTTP定制头
    • cookies:字典或cookiejar,request中的cookie
    • auth:元组,支持HTTP认证功能
    • files:字典类型,传输文件
    • timeout:设定超时时间,秒为单位
    • proxies:字段类型,设定访问代理服务器,可以增加登录认证
    • allow_redirects:True/False,默认为True,重定向开关
    • stream:True/False,默认为True,获取内容立即下载开关
    • verify:True/False,默认为True,认证SLL证书开关
    • cert:本地SSL证书路径

requests.get(url,params=None,**kwargs)

  • url:拟获取页面的url链接
  • params:url中的额外参数,字典或字节流格式,可选
  • **kwargs:12个控制访问的参数

requests.head(url,data=None,json=None,**kwargs)

  • url:拟更新页面的url链接
  • data:字典、字节序列或文件,request的内容
  • json:JSON格式的数据,request的内容
  • **kwargs:11个访问控制参数

requests.patch(url,data=NOne,**kwargs)

  • url:拟更新页面的url链接
  • data:字典、字节序列或文件,request的内容
  • **kwargs:12个访问控制参数

requests.delete(url,**kwargs)

  • url:拟删除页面的url链接
  • **kwargs:13个控制访问的的参数

网络爬虫引发的问题

服务器资源
法律风险
个人隐私

robots协议

网络爬虫排除标准
作用:网站告知网络爬虫哪些页面可以抓取,那些不能抓取
形式:在网站根目录下的robot.txt文件
robots协议基本语法

#注释,*代表所有,/代表根目录
user-agent:*
Disallow:/
robots协议遵守方式

网络爬虫:自动或人工识别robots.txt,再进行内容爬取
约束性:robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险。

requests库网络爬虫实战(5个实例)

实例1:京东商品页面的爬取
import requests
r="https://item.jd.com/296798292.html"
try:
	r=requests.get(url)
	r.raise_for_status()
	r.encoding=r.apparent_encoding
	print(r.text[:1000])
except:
	print("爬取失败")
实例2:亚马逊网页的爬取
import requests
r="https://amazon.cn/gp/product/B01M8L5Z3Y"
try:
	kv={'user-agent':'Mozilla/5.0'}
	r=requests.get(url,header=kv)
	r.raise_for_status()
	r.encoding=r.apparent_encoding
	print(r.text[:1000])
except:
	print("爬取失败")
实例3:百度360搜索关键词提交
import requests
try:
	kv={'wd':'Python'}
	r=requests.get("http://www.baidu.com/s",params=kv)
	print(r.request.url)
	r.raise_for_status()
	print(len(r.text))
except:
	print("爬取失败")
实例4:网络图片的爬取和存储
import requests
import os
url="http://image.nationalgeographic.com.cn/2017/0211/2017021106190157.jpg"
root="D://pics//"
path=root+url.split('/')[-1]
try:
	if not os.path.exits(root):
		os.mkdir(root)
	if not os.path.exists(path):
		r=requests.get(url)
		with open(path,'wb') as f:
			f.write(r.content)
			f.close()
			print("文件保存成功")
	else:
		print("文件已存在")
except:
	print("爬取失败")
实例5:IP地址归属地自动查询
import requests
url="http://m.ip138.com/ip.asp?ip="
try:
	r=requests.get(url+'202.204.80.112')
	r.raise_for_status()
	r.encoding=r.apparent_encoding
	print(r.text[-500:]except:
	print("爬取失败")

解析HTML页面

beautiful soup库的安装

pip install beautifulsoup4

中国大学排名实例

功能描述:
输入大学排名URL 输出大学排名信息屏幕输出排名大学名称总分
技术路线:requests,bs4
定向爬虫:仅对输入的URL进行爬取,不扩展爬取
程序结构设计:
步骤1:从网络上获取大学排名网页内容 getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构 fillUnivList()
步骤3:利用数据结构展示并输出结果 printUnivList()

import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
	try:
		r=requests.get(url,timeout=30)
		r.raise_for_status()
		r.encoding=r.apparent_encoding
		return r.text
	except:
		return ""
def fillUnivList(ulist,html):
	soup=BeautifulSoup(html,"html.parser")
	for tr in soup.find('tbody').children:
		if isinstance(tr,bs4.element.Tag):
			tds=tr('td')
			ulist.append([tds[0].string,tds[1].string,tds[2].string])
def printUnivList(ulist,num):
	print("{0:^10}\t{1:{3}^10}\t{2:^10}".format("排名","学校名称","总分",char(12288)))
	for i in range(num):
		u=ulist[i]
			print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main():
	uinfo=[]
	url='url'
	html=getHTMLText(url)
	fillUnivList(uinfo,html)
	printUnivList(uinfo,20) 

在这里插入图片描述
采用中文字符的空格填充 char(12288)

re库入门

正则表达式概念

正则表达式

  • 通用的字符串表达框架
  • 简介表达一组字符串的表达式
  • 针对字符串表达“简洁”和“特征”思想工具
  • 判断某字符串的特征归属
    正则表达式在文本处理中十分常用
  • 表达文本类型的特征(病毒、入侵等)
  • 同时查找或替换一组字符串
  • 匹配字符串的全部或部分
    正则表达式的使用
  • 编译:将符合正则表达式语法的字符串转换成正则表达式特征
    在这里插入图片描述

股票数据scrapy爬虫

步骤1:建立工程和spider模板
scrapy startproject BaiduStocks
cd BaiduStocks
scrapy genspider stocks baidu.com
步骤2:编写spider
配置stocks.py文件
修改对返回页面的处理
修改对新增URL爬取请求的处理
步骤3:编写ITEM Pipelines

import scrapy
import re
class StocksSpider(scrapy.Spider):
	name="stocks"
	start_urls=['http://quote.eastmoney.com/stocklist.html']
	def parse(self,response):
		for href in response.css('a::attr(href)').extrack():
			try:
				stock=re.findall(r"[s][hz]\d{6},href)[0]
				url='https://gupiao.baidu.com/stock'+stock+'html'
				yield scrapy.Request(url,callback=self.parse_stock)
			except:
				continue
	def parse_stock(self,response):
		infoDict={}
		stockInfo=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值