中国亚马逊网站建设,东莞网络安全建设,站内推广的方法,国内常用的crm系统这节课很危险#xff0c;哈哈哈哈#xff0c;逗你们玩的 目录 写在前面
1 了解robots.txt
1.1 基础理解
1.2 使用robots.txt
2 Cookie
2.1 两种cookie处理方式
3 常用爬虫方法
3.1 bs4
3.1.1 基础介绍
3.1.2 bs4使用
3.1.2 使用例子
3.2 xpath
3.2.1 xpath基础介… 这节课很危险哈哈哈哈逗你们玩的 目录 写在前面
1 了解robots.txt
1.1 基础理解
1.2 使用robots.txt
2 Cookie
2.1 两种cookie处理方式
3 常用爬虫方法
3.1 bs4
3.1.1 基础介绍
3.1.2 bs4使用
3.1.2 使用例子
3.2 xpath
3.2.1 xpath基础介绍
3.2.2 xpath使用
3.2.3 使用例子
写在最后 写在前面
今天给大家找了很多我之前学习爬虫时候的资料虽然我现在不玩爬虫了害怕但是大家还是可以去查阅啥的哈最后求大家给个关注冲冲W粉谢谢
1 了解robots.txt
1.1 基础理解
robots.txt是一个纯文本文件在这个文件中网站管理者可以声明该网站中不想被robots访问的部分或者指定搜索引擎只收录指定的内容一般域名后加/robots.txt就可以获取 当一个搜索机器人有的叫搜索蜘蛛访问一个站点时它会首先检查该站点根目录下是否存在robots.txt如果存在搜索机器人就会按照该文件中的内容来确定访问的范围如果该文件不存在那么搜索机器人就沿着链接抓取 另外robots.txt必须放置在一个站点的根目录下而且文件名必须全部小写。robots.txt写作语法 首先我们来看一个robots.txt范例https://fanyi.youdao.com/robots.txt 访问以上具体地址我们可以看到robots.txt的具体内容如下
User-agent: Mediapartners-Google
Disallow:User-agent: *
Allow: /fufei
Allow: /rengong
Allow: /web2/index.html
Allow: /about.html
Allow: /fanyiapi
Allow: /openapi
Disallow: /app
Disallow: /?以上文本表达的意思是允许所有的搜索机器人访问fanyi.youdao.com站点下的所有文件 具体语法分析User-agent:后面为搜索机器人的名称后面如果是*则泛指所有的搜索机器人Disallow:后面为不允许访问的文件目录
1.2 使用robots.txt
robots.txt自身是一个文本文件。它必须位于域名的根目录中并被命名为robots.txt。位于子目录中的 robots.txt 文件无效因为漫游器只在域名的根目录中查找此文件。例如http://www.example.com/robots.txt 是有效位置http://www.example.com/mysite/robots.txt 则不是有效位置
2 Cookie
由于http/https协议特性是无状态特性因此需要服务器在客户端写入cookie可以让服务器知道此请求是在什么样的状态下发生
2.1 两种cookie处理方式
cookie简言之就是让服务器记录客户端的相关状态信息有两种方式
手动处理 通过抓包工具获取cookie值然后将该值封装到headers中
headers{cookie:....}
在发起请求时把cookie封装进去自动处理 自动处理时要明白cookie的值来自服务器端在模拟登陆post后服务器端创建并返回给客户端 主要是通过session会话对象来操作cookiesession作用可以进行请求的发送如果请求过程中产生了cookie会自动被存储或携带在该session对象中 创建session对象sessionrequests.Session()使用session对象进行模拟登陆post请求发送cookie会被存储在session中 发送session请求session.post()在发送时session对象对要请求的页面对应get请求进行发送携带了cookie
3 常用爬虫方法
用python爬取数据解析原理
标签定位提取标签、标签属性中存储的数据值
3.1 bs4
3.1.1 基础介绍
bs4进行网页数据解析bs4解析原理
通过实例化一个BeautifulSoup对象并且将页面源码数据加载到该对象中通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
环境安装
pip install bs4
pip install lxml3.1.2 bs4使用
3.1.2.1 获取解析对象
如何实例化BeautifulSoup对象 导包from bs4 import BeautifulSoup 对象的实例化有两种本地和远程
将本地的html文档中的数据加载到该对象中
page_text response.text
soupBeautifulSoup(page_text,lxml)3.1.2.2 使用bs4解析
使用bs4提供的用于数据解析的方法和属性 soup.tagName返回的是文档中第一次出现的tagName对应的标签比如soup.a获取第一次出现的a标签信息 soup.find() 在使用find(tagName)效果是等同于soup.tagName 进行属性定位soup.find(‘div’,class_(或id或attr)song)示例就是定位带有classsong的div标签class_必须有下划线是为了规避python关键字 还可以是其他比如soup.find(‘div’,idsong)定位id是song的div标签soup.find(‘div’,attrsong)定位attr是song的div标签 soup.find_all(tagName)返回符合要求的所有标签列表
select用法
select(某种选择器id,class,标签..选择器)返回的是一个列表
获取标签之间文本数据 可以使用text或string或get_text()主要区别
text或get_text()可以获取某一个标签中所有的文本内容string只可以获取该标签下面直系的文本内容
获取标签中属性值
使用python获取字典方法获取比如soup.a[href]就是获取a中的href值
3.1.2 使用例子
import os
import requests
from bs4 import BeautifulSoupheaders{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}
urlhttps://www.test.com/chaxun/zuozhe/77.htmldef getPoems():res requests.get(urlurl,headersheaders)res.encodingUTF-8page_textres.text#在首页解析出章节soup BeautifulSoup(page_text,lxml)shici_list soup.select(.shici_list_main h3 a)shici_name[]for li in shici_list:data_url https://www.test.comli[href]# print(li.stringdata_url)shici_name.append(li.string)detail_res requests.get(urldata_url,headersheaders)detail_res.encodingUTF-8detail_page_textdetail_res.textdetail_soup BeautifulSoup(detail_page_text,lxml)detail_content detail_soup.find(div,class_item_content).text# print(detail_content)with open(./shici.txt,a,encoding utf8) as file:if shici_name.count(li.string)1:file.write(li.string)file.write(detail_content\n)print(li.string下载完成!!!!) if __name____main__:getPoems()3.2 xpath
xpath解析最常用且最便捷高效的一种解析方式
3.2.1 xpath基础介绍
xpath解析原理
实例化一个etree的对象且需要将被解析的页面源码数据加载到该对象中调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
环境安装
pip install lxml3.2.2 xpath使用
3.2.2.1 获取相关对象
先实例化一个etree对象先导包from lxml import etree
将本地的html文档中的源码数据加载到etree对象中
treeetree.parse(filepath)可以将从互联网上获取的源码数据加载到该对象中
page_text response.text
treeetree.HTML(page_text)3.2.2.2 通过xpath解析
通过xpath表达式tree.xpath(xpath表达式)xpath表达式
/表示的是从根节点开始定位表示的是一个层级//表示的是多个层级可以表示从任意位置开始定位属性定位tag[attrNameattrValue] 比如//div[classsong]表示的是获取到任意位置classsong的div标签索引定位//div[classsong]/p[3]表示的是任意位置classsong的div标签下面的第三个p标签注意索引定位是从1开始的取文本/text()获取的是标签中直系文本内容//text()标签中非直系的文本内容所有的文本内容取属性/attrName获取某个属性的值比如//img/src获取任意的img标签的src值
注意xpath中也可以使用管道符|如果第一个没有取到就去取管道符后面的比如xpath(//div/b/text() | //div/a/test())如果管道符左边生效就取左边若右边生效就取右边注意xpath中不能出现tbody标签
3.2.3 使用例子
import requests
from lxml import etree
import reheaders{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36}
urlhttps://www.test.com/chaxun/zuozhe/77.htmldef getPoemsByXpath():res requests.get(urlurl,headersheaders)res.encodingUTF-8page_textres.text#在首页解析出章节tree etree.HTML(page_text)shici_list tree.xpath(//div[classshici_list_main])shici_name_outfor shici in shici_list:#此处使用相对路径shici_nameshici.xpath(h3/a/text())[0]# print(shici_name)shici_text_listshici.xpath(div//text())# print(shici_text_list)with open(./shicibyxpath.txt,a,encoding utf8) as file:if shici_name_out!shici_name:file.write(shici_name\n)for text in shici_text_list:if 展开全文text or 收起text or re.match(r^\s*$,text)!None or re.match(r^\n\s*$,text)!None:continuere_texttext.replace( ,).replace(\n,)file.write(re_text\n)if shici_name_out!shici_name:print(shici_name下载完成!!!!) shici_name_outshici_nameif __name____main__:getPoemsByXpath()
写在最后 不要去干坏事因为爬虫程序采集到公民的姓名、身份证件号码、通信通讯联系方式、住址、账号密码、财产状况、行踪轨迹等个人信息并将之用于非法途径的则肯定构成非法获取公民个人信息的违法行为。也就是说你爬虫爬取信息没有问题但不能涉及到个人的隐私问题如果涉及了并且通过非法途径收益了那肯定是违法行为。另外还有下列三种情况爬虫有可能违法严重的甚至构成犯罪爬虫程序规避网站经营者设置的反爬虫措施或者破解服务器防抓取措施非法获取相关信息情节严重的有可能构成“非法获取计算机信息系统数据罪”。爬虫程序干扰被访问的网站或系统正常运营后果严重的触犯刑法构成“破坏计算机信息系统罪”爬虫采集的信息属于公民个人信息的有可能构成非法获取公民个人信息的违法行为情节严重的有可能构成“侵犯公民个人信息罪”
所以学习Python爬虫是没问题的但是心一定要正