一。使用json

  正常的,如果需要将response结果序列化,需要将结果json.loads

res1=json.loads(response.text)

  但是这样会很麻烦,request提供了json方法:

res2=response.json() #直接获取json数据

  

二。SSL认证

  ssl就是http+SSL,也就是https。需要带上证书才能访问特定的网站。

  证书需要浏览器下载。

#SSL
# https=http+ssl
import requests
respone=requests.get('https://www.12306.cn',
cert=('/path/server.crt',
'/path/key'))
print(respone.status_code)

三。使用代理

  在get请求中proxies关键字就是存放代理网址,:(西刺)

  通过META.get('REMOVE_ADDR')

import reques1ts
proxies={
'http':'http://egon:123@localhost:9743',#带用户名密码的代理,@符号前是用户名与密码
'http':'http://localhost:9743',
'https':'https://localhost:9743',
'http':'http://124.205.155.148:9090'
}
respone=requests.get('https://www.12306.cn',
proxies=proxies) print(respone.status_code)

四。超时设置

  

import requests
respone=requests.get('https://www.baidu.com',
timeout=0.0001)

五。 上传文件。

import requests
files={'file':open('a.jpg','rb')}
respone=requests.post('http://httpbin.org/post',files=files)
print(respone.status_code)

  另外有检测服务器压力的工具

  jmter 压力测试工具

六。使用bs4

  使用插件bs4,可以快速匹配页面中的元素。

  首先需要下载bs4和lxml

pip install lxml

pip install html5lib

pip install beautifulsoup

  使用时首先需要将数据爬取,并生成Beautiful对象

import requests
from bs4 import BeautifulSoup
url='https://www.autohome.com.cn/news/1/#liststart'
res=requests.get(url)
soup=BeautifulSoup(res.text,'lxml')

  再者使用基本用法find,获取一个对象,其中的筛选条件是系与id,name等例子:

div=soup.find(id='auto-channel-lazyload-article')
ul=div.find(name='ul')
li_list=ul.find_all(name='li')
# print(len(li_list))
for li in li_list:
h3=li.find(name='h3')
if h3:
title=h3.text #把h3标签的text取出来
print(title)
a=li.find(name='a')
if a:
article_url=a.get('href') #取出a标签的href属性
print(article_url) img=li.find(name='img')
if img:
img_url=img.get('src')
print(img_url)
p=li.find(name='p')
if p:
content=p.text
print(content)

  findall则是将所有元素都找到。

  总结:

  find:

  -name="标签名" 标签

  -id,class_,="" 把这个标签拿出来

  -标签.text 取标签的内容

  -标签.get(属性名) 取标签属性的内容

  find_all

其他用法:

from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body> <p class="title" id="bbaa"><b name="xx" age="18">The Dormouse's story</b><b>xxxx</b></p>
<p class="xxx" a="xxx">asdfasdf</p> <p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p> <p class="story">...</p>
"""
soup=BeautifulSoup(html_doc,'lxml')
ress=soup.prettify() #美化一下
soup=BeautifulSoup(ress,'lxml')

  通过该对象点标签可以直接对其进行操作:

#遍历文档树
# print(soup.p.name) # 获取该对象中的标签名字
# print(soup.p.attrs) # 获取该对象中的属性集合
# print(soup.p.string) # 获取标签中的字
# print(list(soup.p.strings)) # 迭代器
# print(soup.p.text) # 所有
# print(soup.p.b)
# print(soup.body.p.text) # 只识别文本呢
# print(soup.body.p.contents) #生成期中的所有元素
# print(list(soup.body.p.children)) # 迭代器生成期中的所有元素
# print(list(soup.body.p.descendants)) # 迭代器输出所有孩子
# print(soup.body.p.parent) # 输出p的父标签所有的元素
# print(list(soup.body.p.parents)) # 取出所以有父节点
# print(len(list(soup.body.p.parents)))
# print(soup.body.p.previous_sibling) # 他的上一个兄弟
# print(soup.body.p.previous_sibling)
# print(soup.find(class_="xxx").previous_sibling)
# print(soup.p.next_sibling) # 下一个兄弟
# print(soup.a.previous_sibling)
# print(type(soup.p))

  查找文档法:

  一共有五种过滤器:字符串,正则,布尔,方法,列表

  1.通过字符串过滤:

# print(soup.find_all(name='b'))

  2.通过正则过滤

# print(soup.find_all(name=re.compile('^b')))
# print(soup.find_all(id=re.compile('^b')))

  3.通过列表与布尔值:

# print(soup.find_all(name=['a','b']))
# print(soup.find_all(name=True))

  4.通过方法:

# def has_class_but_no_id(tag):
# return tag.has_attr('class') and not tag.has_attr('id')
# print(soup.find_all(name=has_class_but_no_id))

  css选择器法:

# print(soup.select(".title"))
# print(soup.select("#bbaa"))
# print(soup.select('#bbaa b')[0].attrs.get('name'))

  其他用法:

#recursive=False  只找同一层
#limit 找到第几个之后停止

七。通过测试软件自动点网站。

  1.安装selenium模块:

pip install selenium

  2.安装插件到项目文件夹下或者puthon下的scripts中,需要核对版本信息。:
http://npm.taobao.org/mirrors/chromedriver/78.0.3904.105/

  使用:

from selenium import webdriver
bro=webdriver.Chrome()
bro.get('https://www.baidu.com')
time.sleep(3)
bro.close()

  无窗口操作:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys #键盘按键操作
import time from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手动指定使
bro=webdriver.PhantomJS() bro=webdriver.Chrome(chrome_options=chrome_options)
bro=webdriver.Chrome()
bro.get('https://www.baidu.com')

  chrome支持无窗口操作。

  自动化控制窗口:

bro=webdriver.Chrome()
bro.get('https://www.baidu.com') # print(bro.page_source)
# time.sleep(3)
time.sleep(1)
#取到输入框
inp=bro.find_element_by_id('kw')
#往框里写字
inp.send_keys("美女")
inp.send_keys(Keys.ENTER) #输入回车
#另一种方式,取出按钮,点击su
time.sleep(3)
bro.close()

day94_11_26爬虫find与findall的更多相关文章

  1. Python爬虫教程-19-数据提取-正则表达式(re)

    本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式 Python爬虫教程-19-数据提取-正则表达式(re) 正则表达式 ...

  2. python爬虫--数据解析

    数据解析 什么是数据解析及作用 概念:就是将一组数据中的局部数据进行提取 作用:来实现聚焦爬虫 数据解析的通用原理 标签定位 取文本或者属性 正则解析 正则回顾 单字符: . : 除换行以外所有字符 ...

  3. python爬虫笔记之re.match匹配,与search、findall区别

    为什么re.match匹配不到?re.match匹配规则怎样?(捕一下seo) re.match(pattern, string[, flags]) pattern为匹配规则,即输入正则表达式. st ...

  4. 爬虫常用正则、re.findall 使用

    爬虫常用正则 爬虫经常用到的一些正则,这可以帮助我们更好地处理字符. 正则符 单字符 . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D ...

  5. 网络爬虫re模块的findall()函数

    findall()函数匹配所有符合规律的内容,并以列表的形式返回结果. a = '"<div>指数' \ '</div>"' word = re.finda ...

  6. python爬虫笔记之re.compile.findall()

    re.compile.findall原理是理解了,但输出不大理解(主要是加了正则表达式的括号分组) 一开始不懂括号的分组及捕捉,看了网上这个例子(如下),然而好像还是说不清楚这个括号的规律(还是说我没 ...

  7. python获取ip代理列表爬虫

    最近练习写爬虫,本来爬几张mm图做测试,可是爬到几十张的时候就会返回403错误,这是被网站服务器发现了,把我给屏蔽了. 因此需要使用代理IP.为了方便以后使用,我打算先写一个自动爬取ip代理的爬虫,正 ...

  8. 学习日记-从爬虫到接口到APP

    最近都在复习J2E,多学习一些东西肯定是好的,而且现在移动开发工作都不好找了,有工作就推荐一下小弟呗,广州佛山地区,谢谢了. 这篇博客要做的效果很简单,就是把我博客的第一页每个条目显示在APP上,条目 ...

  9. Python初学者之网络爬虫(二)

    声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途.转载请附上此文章地址 本篇文章Python初学者之网络爬虫的继续,最新代码已提交到https://github.com/octans ...

随机推荐

  1. centos安装go环境

    centos安装go环境 1,下载合适的go安装包 https://studygolang.com/dl 2 上传到 centos服务器的 /usr/local下然后解压 3.设置go的环境变量    ...

  2. 字节跳动——IT技术工程师面试题

    .自我介绍 .项目介绍 .争对个人项目进行提问 .场景模拟 .1如何知道用户的指定视频(类似于QQ发视频)的服务是正常的 .使用appum进行自动化测试 .使用bat脚本获取进程状态,然后定时发送em ...

  3. Change Style of Navigation Items 更改导航项的样式

    In this lesson, you will learn how to change the style of navigation items in a WinForms XAF applica ...

  4. 简约清新立体商务年终工作总结汇报动态PPT模板

    模版来源:http://ppt.dede58.com/gongzuohuibao/26682.html

  5. laravel开发大型电商网站之异常设计思路分析

    令人讨厌的异常 提起异常,大家都很反感,当信心满满的写完一段代码,刷新页面发现上面写着大大的 Exception 是最心烦的时候了.模块给领导演示的时候,如果报了异常,也是最让人崩溃的时候了. 在一般 ...

  6. 入职小白随笔之Android四大组件——内容提供器详解(Content Provider)

    Content Provider 内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间 实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的 ...

  7. 常用的git和repo命令

    首先下图是git的流程图 相关概念 svn与git命令的对比 git常用命令 git log // 查看当前库的git log信息 git status ./ // 查看当前库的状态 git diff ...

  8. 新手学Html之JSP基础语法——入门(二)

    JSP基础语法 JSP注释 comment.jsp <%@ page language="java" contentType="text/html; charset ...

  9. np.array()和np.dot()的区别

    1.生成数组的方式不同 2.乘法计算方式不同 array生成数组,np.dot()表示矩阵乘积,(*)号或np.multiply()表示点乘 mat生成数组,(*)和np.dot()表示矩阵相乘,点乘 ...

  10. 自己开发的网站压力测试(阿里云1M带宽)

    背景 项目采用微服务架构设计,独立商城系统,博客系统,搜索系统,sso单点系统部署在docker环境下 商城系统(django) 博客系统(flask) 搜索系统(es+flask+restful) ...