python爬虫

本文深入讲解了爬虫技术的核心概念,包括如何通过User-Agent伪装浏览器进行网页请求,异常处理策略,以及利用BeautifulSoup、正则表达式和Lxml库解析网页数据的方法。同时,文章还介绍了如何使用Python进行时间计算和休眠操作。

User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。
. 首先打开你的浏览器输入:about:version。
2. 输入后,浏览器会跳出图中的界面,红笔标出的“用户代理”一行就是浏览器的User-Agent。
3. 当python要浏览网页时,按图中的方法,即可获得浏览器的权限。

爬虫原理
请求服务器->解析原始网页->存储数据

import requests
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}#请求头伪装浏览器
res = requests.get('网站URL',headers=headers )#请求网页数据
异常处理
1.
try:
	print(res.text)
except ConnectionError:
	print('拒接连接')
2.
if res.status_code==200:#判断请求码是否等于200
else:
	pass

解析数据
Beautifulsoup

from bs4 import Beautifulsoup
soup = Beautifulsoup(res.text,'html.parser')#解析方式html.parser
lxml.parser容错快
 xml.parser唯一支持
 xml html5lib.parser以浏览器的方式解析
print(soup.prettify())#数据结构化输出

过滤数据:

soup.find_all("div","item")#查找属性为item的div标签
soup.selector(div.item>a>hi)#从大到小定位信息
get_text()#去除标签,截取文本内容

正则表达式:

.匹配单个字符
(.*?)匹配任意字符
\d匹配数字
\D匹配非数字
\w匹配字母
\W匹配非字母
\s匹配空白字符
\S匹配非空白字符
*匹配0或者无限次
+至少匹配一次
?匹配0次或者1次
{m}匹配m次
{m,n}匹配m之n次
^匹配开头
$匹配结尾
\A只匹配开头
\Z只匹配结尾

re语法
re语法实例
re.seach()
goup()提取数据
re.sub()替换字符
findall()匹配内容并以列表形式返回
ps:

re.findall('<p>(.*?)</p>,res.content.decode('UTF_8'),re.S')
for content in contents:
	f.write(content+'\n')

re.I忽略大小写
re.L本地化识别
re.M多行匹配
re.S匹配包括换行

Lxml库与Xpath语法
Python爬虫教程-22-lxml-etree和xpath配合使用

form Lxml import etree
html = etree.HTML(res.text)解析
result = etree.tostring(html).code()
printf(result)

词频统计
Python第三方库jieba(中文分词)入门与进阶(官方文档)

代码时间计算与休眠
时间计算

import time
time.sleep(n)#休眠n秒
# time.sleep()程序休眠()秒
print("hello")
time.sleep(2)
print(" word!")

# 将当前时间转化为一个字符串
print(time.ctime()) # Fri Aug 24 19:19:04 2018
print(type(time.ctime())) # <class 'str'>

# 将当前时间转化为当前时区的struct_time
# wday 0-6表示周日至周六
# yday 1-366 一年的第几天
# isdst 是否为夏令时,默认为-1
print(time.localtime())  # time.struct_time(tm_year=2018, tm_mon=8, tm_mday=24, tm_hour=19, tm_min=21, tm_sec=39, tm_wday=4, tm_yday=236, tm_isdst=0)   
print(type(time.localtime())) # <class 'time.struct_time'>

# strftime(a,b)     
# 其中a是格式化时间字符串输出
# b是一个时间戳,一般就用localtime()
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) # 2018-08-24 19:24:16
import time
**计算时间**
start = time.time()
xxx
xxx
end = time.time()
running_time = end-start
print('time cost : %.5f sec' %running_time)

计算时间

start = time.time()
xxx
xxx
end = time.time()
running_time = end-start
print('time cost : %.5f sec' %running_time)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值