【零基础学爬虫】爬虫基本原理
2019-03-14 本文已影响4人
大菜鸟_
什么是爬虫
请求网站,提取网页内容的最大化程序。获取到的是html代码,需要从这些文本中提取需要的数据
- 发起请求:
向目标站点发送HTTP请求,即发送一个Request,请求可以包括额外的header等信息,等待服务器响应
2.获取响应内容
如果服务器正常,在第一步会返回一个response,response的内容便是所要获取的页面内容,类型可能有HTML,Json字符串、二进制数据(如图片视频)等类型。
3.解析内容
得到的内容可能是HTML。可以使用正则表达式、网页解析库进行解析。如果是json,则可以直接解析为json对象进行解析;如果是二进制数据,可以保存或者进一步的处理。
4.保存数据:
可以存为文本,也可以保存到数据库或者特定格式的文件
request和response
爬虫request中包含什么?
request.pngresponse中包含哪些东西?
response.png爬虫可以抓取什么样的数据?
内容.png获取到数据后,如何解析?
解析.png注意:
使用request.get('url')得到的只是第一个请求的内容,即当我们执行:
import requests
response = requests.get('http://www.weibo.com')
print(response.text)#打印出的是第一个请求返回的代码
即返回的是下图中红色方框中的代码:
微博.png
抓取到的数据和浏览器页面不一样?
原生的html是不包括任何信息的,页面显示的信息是通过后续的js调用后台的接口拿到数据,js再把网页加载出来的。所以elements中的源代码和我们拿到的源代码是不一样的:
elements.jpg
如何解决这种JavaScript渲染问题?
- 分析Ajax请求:Ajax请求返回的结果就是Json格式字符串
- Selenium的WebDriver模拟或驱动一个浏览器网页,自动化测试根据。案例如下:
#pip install selenium
from selenium import webdirver
driver = webdriver.Chrom();#自动打开chrome浏览器
driver.get('www.weibo.com')#浏览器页面自动跳转到指定网址
print(driver.page_source)#获取到的源代码和浏览器页面的源代码一致,这是渲染后的页面源码,js渲染的问题就不存在了。
这种方式的缺点是后台会自动运行chrome浏览器
- Splash:和Selenium一样,都是用来模拟js渲染,可以是github上搜索,有详细的文档。
- 另外还有使用:PyV8、Ghost.py等库
解决JavaScript渲染问题的方案总结
js渲染问题.png怎样保存数据
- 文本
- 关系型数据库
- 菲关系型数据库
- 二进制文件
扫描下方二维码,及时获取更多互联网求职面经、java、python、爬虫、大数据等技术,和海量资料分享:
公众号菜鸟名企梦
后台发送“csdn”即可免费领取【csdn】和【百度文库】下载服务;
公众号菜鸟名企梦
后台发送“资料”:即可领取5T精品学习资料、java面试考点和java面经总结,以及几十个java、大数据项目,资料很全,你想找的几乎都有