爬虫简答考题
一.如何爬取静态网页和动态网页代码:
1.抓取静态代码:
静态页面中的数据都包含在网页的HTML中(一般都是get请求)
静态网页通过requests库获取源代码,用bs4,re进行解析
import requests url = " " html = requests.get(url).text
2.抓取动态加载网页:
结构化数据:json,xml等
动态页面和静态页面最主要的区别就是当数据刷新的时候用了ajax技术,刷新时从数据库查询数据并重新渲染到前端页面,
数据都存储在网络包中,爬取HTML是获取不到数据的。
抓取这种动态页面常见的有两种方式:
(1)抓取网络请求包
请求接口一些需要传参数,需要破解参数,破解js和破解参数
(2)无头浏览器渲染
selenium 为浏览器测试框架,可以调用浏览器webdriver模拟浏览器作,等网页所有源码加载完后,获取源码用bs4,re进行解析
#coding=utf-8 from selenium import webdriver Chrome_options = webdriver.ChromeOptions() Chrome_options.add_argument('--headless') # 设为无头模式,可以不弹出浏览器窗口 drive = webdriver.Chrome(chrome_options=Chrome_options) drive.get('http://public.163.com/#/list/movie') html = drive.page_source print(html) drive.quit()
二.爬虫的原理:
通过代码,模拟浏览器向服务器发送HTTP或者HTTPS请求,然后对服务器响应的结果进行处理,从中获取想要的数据。
三.什么是爬虫:
网络爬虫(Spider)是一种程序,它的主要目的是将互联网上的网页下载到本地并提取出相关数据。网络爬虫可以自动化的浏览网络中的信息,然后根据我们制定的规则下载和提取信息。什么是爬虫
四.爬虫的应用和作用:
1.收集数据
爬虫最直接、最常用的使用方法,其运行速度极快而且不会因为做重复的事情就感觉到疲劳,因此使用爬虫来获取大量的数据。
2.尽职调查
投资人在投资一一个公司之前,需要知道这个公司是否如他们自己所描述的一样尽职尽责地.工作,是否有偷奸耍滑、篡改数据、欺骗投资人的嫌疑有了爬虫的帮助,很多欺骗行为都会赤裸裸地暴露在阳光下。
3.刷流量,秒杀和抢票等
刷流量是爬虫天然自带的功能。当爬虫访问了一个网站时,如果这个爬虫隐藏得很好,网站不能识别这一次访问来自于爬虫, 那么就会把它当成正常访问。爬虫也可以参与各种秒杀活动,包括但不限于在各种电商网站_上抢商品,抢优惠券,抢机票和火车票
五.爬虫的危害:
(1)性能骚扰 Web服务器默认接收人类访问,而而受限于编写水平和目的,网络爬虫将会为Web服务器带来巨大的资源开销。
三.什么是爬虫:
网络爬虫(Spider)是一种程序,它的主要目的是将互联网上的网页下载到本地并提取出相关数据。网络爬虫可以自动化的浏览网络中的信息,然后根据我们制定的规则下载和提取信息。什么是爬虫
四.爬虫的应用和作用:
1.收集数据
爬虫最直接、最常用的使用方法,其运行速度极快而且不会因为做重复的事情就感觉到疲劳,因此使用爬虫来获取大量的数据。
2.尽职调查
投资人在投资一一个公司之前,需要知道这个公司是否如他们自己所描述的一样尽职尽责地.工作,是否有偷奸耍滑、篡改数据、欺骗投资人的嫌疑有了爬虫的帮助,很多欺骗行为都会赤裸裸地暴露在阳光下。
3.刷流量,秒杀和抢票等
刷流量是爬虫天然自带的功能。当爬虫访问了一个网站时,如果这个爬虫隐藏得很好,网站不能识别这一次访问来自于爬虫, 那么就会把它当成正常访问。爬虫也可以参与各种秒杀活动,包括但不限于在各种电商网站_上抢商品,抢优惠券,抢机票和火车票
五.爬虫的危害:
(1)性能骚扰 Web服务器默认接收人类访问,而而受限于编写水平和目的,网络爬虫将会为Web服务器带来巨大的资源开销。
(2)法律风险 服务器上的数据有产权归属,而网络爬虫获取数据后牟利将带来法律风险。
(3)隐私泄露 网络爬虫可能具备突破简单访问控制的能力,获得被保护数据从而泄漏个人隐私。
(4)从网站业务安全的角度,危害有以下几点: 核心文本被爬、 注册用户被扫描、点击欺诈、网站带宽负担 。
(4)从网站业务安全的角度,危害有以下几点: 核心文本被爬、 注册用户被扫描、点击欺诈、网站带宽负担 。
csv储存list:
datas = []
with open('.csv', 'w', newline='',encoding='utf-8-sig') as f:
writer = csv.writer(f)
for row in datas:
writer.writerow(row)