网页源代码抓取工具(.1请求方式及相关工具解析(2015年03月23日))
优采云 发布时间: 2022-04-18 19:12网页源代码抓取工具(.1请求方式及相关工具解析(2015年03月23日))
请求收录:请求头、请求体等。
2.2 获取响应内容
如果服务器能正常响应,就会得到一个Response
响应收录:html、json、图片、视频等。
2.3 内容类型分析及相关工具
解析html数据:正则表达式、Beautifulsoup、pyquery等第三方解析库。
解析json数据:json模块
解析二进制数据:作为 b 写入文件
2.4 保存数据
根据需要将数据保存到数据库或文件
三、请求和响应
ps:浏览器收到Response后会解析其内容展示给用户,爬虫程序模拟浏览器发送请求再接收Response后提取有用数据。
四、请求4.1 请求方法
常用请求方式:GET、POST
其他请求方式:HEAD、PUT、DELETE、OPTHONS
ps:用浏览器演示get与post的区别,(用登录演示post)
1 post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k3=zzz
2 post请求的参数放在请求体内,可用浏览器查看,存放于form data内
3 get请求的参数直接放在url后
4.2 请求地址
url的全称是Uniform Resource Locator,比如网页文档、图片、视频等都可以由url唯一确定
url编码:https://www.baidu.com/s?wd=图片
网页的加载过程是:加载一个网页,通常都是先加载document文档,在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求
4.3 请求头
User-agent:如果请求头中没有user-agent客户端配置,服务器可能会将你视为非法用户
host:客户端指定要访问的http服务器的域名/IP地址和端口号
cookie:cookie用于存储登录信息
一般做爬虫都会加上请求头
4.4 请求正文
如果是get方法,请求体没有内容
如果是post方式,请求体为格式数据
ps:
1、登录窗口,文件上传等,信息都会被附加到请求体内
2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post
#示例:
from urllib.parse import urlencode
import requests
headers={
\'Accept\':\'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\',
\'Cookie\':\'H_WISE_SIDS=101556_115474_115442_114743_108373_100099_115725_106201_107320_115339_114797_115553_116093_115546_115625_115446_114329_115350_114275_116040_110085; PSTM=1494300712; BAIDUID=42FE2934E37AF7AD1FA31D8CC7006D45:FG=1; BIDUPSID=2996557DB2710279BD865C50F9A68615; MCITY=-%3A; __cfduid=da9f97dea6458ca26aa4278280752ebb01508939712; BDSFRCVID=PGLsJeCCxG3wt_3ZUrBLDfv2D_qBZSjAgcEe3J; H_BDCLCKID_SF=tJAOoCLytI03qn5zq4Oh-4oHhxoJq5QxbT7Z0l8KtfcNVJQs-lCMhbtp-l3GJPoLWK6hBKQmWIQHDnbsbq0M2tcQXR5-WROCte74KKJx-4PWeIJo5tKh04JbhUJiB5OLBan7Lq7xfDDbbDtmej_3-PC3ql6354Rj2C_X3b7EfKjIOtO_bfbT2MbyeqrNQlTkLIvXoITJQD_bEP3Fbfj2DPQ3KabZqjDjJbue_I05f-oqebT4btbMqRtthf5KeJ3KaKrKW5rJabC3hPJeKU6qLT5Xjh6B5qDfyDoAbKOt-IOjhb5hMpnx-p0njxQyaR3RL2Kj0p_EWpcxsCQqLUonDh8L3H7MJUntKjnRonTO5hvvhb6O3M7-XpOhDG0fJjtJJbksQJ5e24oqHP-kKPrV-4oH5MQy5toyHD7yWCvjWlT5OR5Jj6KMjMkb3xbz2fcpMIrjob8M5CQESInv3MA--fcLD2ch5-3eQgTI3fbIJJjWsq0x0-jle-bQypoa-U0j2COMahkMal7xO-QO05CaD53yDNDqtjn-5TIX_CjJbnA_Hn7zepoxebtpbt-qJJjzMerW_Mc8QUJBH4tR-T3keh-83xbnBT5KaKO2-RnPXbcWjt_lWh_bLf_kQN3TbxuO5bRiL66I0h6jDn3oyT3VXp0n54nTqjDHfRuDVItXf-L_qtDk-PnVeUP3DhbZKxtqtDKjXJ7X2fclHJ7z-R3IBPCD0tjk-6JnWncKaRcI3poiqKtmjJb6XJkl2HQ405OT-6-O0KJcbRodobAwhPJvyT8DXnO7-fRTfJuJ_DDMJDD3fP36q4QV-JIehmT22jnT32JeaJ5n0-nnhP3mBTbA3JDYX-Oh-jjRX56GhfO_0R3jsJKRy66jK4JKjHKet6vP; ispeed_lsm=0; H_PS_PSSID=1421_24558_21120_17001_24880_22072; BD_UPN=123253; H_PS_645EC=44be6I1wqYYVvyugm2gc3PK9PoSa26pxhzOVbeQrn2rRadHvKoI%2BCbN5K%2Bg; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598\',
\'Host\':\'www.baidu.com\',
\'User-Agent\':\'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\'}
# response=requests.get(\'https://www.baidu.com/s?\'+urlencode({\'wd\':\'美女\'}),headers=headers)
response=requests.get(\'https://www.baidu.com/s\',params={\'wd\':\'美女\'},headers=headers) #params内部就是调用urlencode
print(response.text)
五、Response5.1 普通响应状态码
详情见博客:#%E4%B8%83%E3%80%81%E7%8A%B6%E6%80%81%E7%A0%81
200:代表成功
301:代表跳跃
404:文件不存在
403:权限
502:服务器错误
5.2 响应头
set-cookie:可能有多个,告诉浏览器保存cookie
5.3预览是网页的源代码
主要部分收录请求资源的内容,如网页html、图片、二进制数据等。
六、总结6.1 总结爬虫流程
抓取--->解析--->存储
6.2 爬虫所需的工具
请求库:requests, selenium
解析库:regular、beautifulsoup、pyquery
存储库:文件、MySQL、Mongodb、Redis
6.3 常用爬虫框架
1、Scrapy:Scrapy 是一个应用程序框架,用于抓取 网站 数据并提取结构化数据。它可以用于一系列程序,包括数据挖掘、信息处理或存储历史数据。是一个非常强大的爬虫框架,可以满足简单的页面爬取,比如可以清楚知道url格式的情况。使用此框架可以轻松爬取亚马逊列表等数据。但是对于稍微复杂一点的页面,比如微博的页面信息,这个框架就不能满足需求了。它的特点是:HTML、XML源数据选择和内置的提取支持;提供了一系列可重用的过滤器(即Item Loaders)在spider之间共享,并为爬取数据的智能处理提供内置支持。
2、Crawley:高速爬取网站对应的内容,支持关系型和非关系型数据库,数据可以导出为JSON、XML等。
3、Portia:是一款开源的可视化爬虫工具,用户无需任何编程知识即可爬取网站!只需对您感兴趣的页面进行注释,Portia 就会创建一个爬虫来从相似页面中提取数据。简单来说就是基于scrapy内核;在没有任何开发专业知识的情况下直观地抓取内容;动态匹配同一模板的内容。
4、newspaper:可用于新闻提取、文章和内容分析。使用多线程,支持 10 多种语言等。作者从 requests 库的简单性和强大功能中汲取灵感,这是一个用 Python 开发的可用于提取 文章 内容的程序。支持10多种语言,全部采用unicode编码。
5、Python-goose:一个用Java编写的文章提取工具。Python-goose 框架可以提取的信息包括:文章 主内容、文章 主图像、文章 中嵌入的任何 Youtube/Vimeo 视频、元描述、元标记。
6、美汤:很有名,集成了一些常见的爬虫需求。它是一个 Python 库,可以从 HTML 或 XML 文件中提取数据。它支持通过您最喜欢的转换器导航、查找和修改文档的惯用方式。Beautiful Soup 将为您节省数小时甚至数天的工作时间。Beautiful Soup 的缺点是不能加载 JS。
7、mechanize:有加载JS的优势。当然,它也有缺点,例如严重缺乏文档。但是通过官方的例子和人肉尝试的方法,还是勉强能用。
8、selenium:这是一个调用浏览器的驱动程序。有了这个库,你可以直接调用浏览器完成某些操作,比如输入验证码。Selenium 是一种自动化测试工具。支持多种浏览器,包括Chrome、Safari、Firefox等主流界面浏览器。如果在这些浏览器中安装 Selenium 插件,就可以轻松实现 Web 界面测试。Selenium 支持浏览驱动器。Selenium支持多种语言开发,如Java、C、Ruby等。PhantomJS用于渲染和解析JS,Selenium用于驱动和与Python接口,Python用于后处理。
9、cola:是一个分布式爬虫框架。对于用户来说,只需要写几个具体的函数,不需要关注分布式操作的细节。任务自动分发到多台机器上,整个过程对用户透明。项目整体设计有点差,模块之间耦合度高。
10、PySpider:一个强大的网络爬虫系统,一个中国人写的,强大的WebUI。用 Python 语言编写,分布式架构,支持多种数据库后端,强大的 WebUI 支持脚本编辑器、任务监视器、项目管理器和结果查看器。Python脚本控件,可以使用任何你喜欢的html解析包。