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)