爬虫总结

爬取网站的思路

  1. 先确定是否为动态加载网站
  2. 找URL规律
  3. 正则表达式或xpath
  4. 定义程序框架,补全并测试代码

多级页面数据抓取

1、爬取一级页面,提取所需数据+链接,继续跟进

2、爬取二级页面,提取所需数据+链接,继续跟进

3、...

爬虫代码规范书写:

# 程序结构
class xxxSpider(object):
    def __init__(self):
        # 定义常用变量,url,headers及计数等

    def get_html(self):
        # 获取响应内容函数,使用随机User-Agent

    def parse_html(self):
        # 使用正则表达式来解析页面,提取数据

    def write_html(self):
        # 将提取的数据按要求保存,csv、MySQL数据库等

    def main(self):
        # 主函数,用来控制整体逻辑

if __name__ == ‘__main__‘:
    # 程序开始运行时间戳
    start = time.time()
    spider = xxxSpider()
    spider.main()
    # 程序运行结束时间戳
    end = time.time()
    print(‘执行时间:%.2f‘ % (end-start))

常见的反爬总结

基于User-Agent反爬

一般被关注的变量是userAgent和Referer和Cookie,可以考虑用浏览器中

1、发送请求携带请求头: headers={‘User-Agent‘ : ‘Mozilla/5.0 xxxxxx‘}

User-Agent限制:网站可能会判断当某一个User-Agent高频率访问的时候,会加以限制。

解决方法:

1、定义列表存放大量User-Agent,使用random.choice()每次随机选择

2、定义py文件存放大量User-Agent,使用random.choice()每次随机选择

3、使用fake_useragent每次访问随机生成User-Agent

from fake_useragent import UserAgent

ua = UserAgent()
user_agent = ua.random
print(user_agent)

IP限制网站根据IP地址访问频率进行反爬,短时间内进制IP访问

解决方案:

1、构造自己IP代理池,每次访问随机选择代理,经常更新代理池
2、购买开放代理或私密代理IP
3、降低爬取的速度

Cookies:建立有效的Cookie池,每次访问随机切换

1、适用网站类型: 爬取网站页面时需要登录后才能访问,否则获取不到页面的实际响应数据

2、方法1(利用cookie)

    1、先登录成功1次,获取到携带登陆信息的Cookie(处理headers)

    2、利用处理的headers向URL地址发请求

3、方法2(利用session会话保持)

  1、实例化session对象

    session = requests.session()

  2、先post : session.post(post_url,data=post_data,headers=headers)

    1、登陆,找到POST地址: form -> action对应地址

    2、定义字典,创建session实例发送请求

      # 字典key :<input>标签中name的值(email,password)

      # post_data = {‘email‘:‘‘,‘password‘:‘‘}

  3、再get : session.get(url,headers=headers)

验证码:验证码数量较少可人工填写,图形验证码可使用tesseract识别,其他情况只能在线打码、人工打码和训练机器学习模型

响应内容前端JS做处理反爬

1、html页面中可匹配出内容,程序中匹配结果为空

  • 响应内容中嵌入js,对页面结构做了一定调整导致,通过打印查看网页源代码,格式化输出查看结构,更改xpath或者正则测试

2、如果数据出不来可考虑更换 IE 的User-Agent尝试,数据返回最标准

From表达数据认证(salt、sign)签名及js加密:一般为本地JS加密,查找本地JS文件,分析,或者使用execjs模块执行JS

js调整页面结构

js在响应中指定新地址:从响应代码中找目标地址,政府行政编码

动态生成

动态加载的数据,数据不再网页代码中,而是在后台的异步加载的数据包中。

1、F12打开控制台,页面动作抓取网络数据包

2、抓取json文件URL地址

# 控制台中 XHR :异步加载的数据包

# XHR -> Query String(查询参数)

请求模块总结

urllib库使用流程

# 编码
params = {
    ‘‘:‘‘,
    ‘‘:‘‘
}
params = urllib.parse.urlencode(params)
url = baseurl + params
?
# 请求
request = urllib.request.Request(url,headers=headers)
response = urllib.request.urlopen(request)
html = response.read().decode(‘utf-8‘)

requests模块使用流程

baseurl = ‘http://tieba.baidu.com/f?‘
html = requests.get(baseurl,params=params,headers=headers).content.decode(‘utf-8‘,‘ignore‘)

写程序最终目的:程序不要因为任何异常而终止,页面请求设置超时时间,并用try捕捉异常,超过指定次数更换下一个url地址

scrapy框架爬虫

selenium+browser爬虫

解析模块总结

正则解析re模块

import re
?
pattern = re.compile(‘正则表达式‘,re.S)
r_list = pattern.findall(html)

lxml解析库

from lxml import etree
?
parse_html = etree.HTML(res.text)
r_list = parse_html.xpath(‘xpath表达式‘)

json

# json
# 响应内容由json转为python
html = json.loads(res.text)
# 所抓数据保存到json文件
with open(‘xxx.json‘,‘a‘) as f:
    json.dump(item_list,f,ensure_ascii=False)
# 或
f = open(‘xxx.json‘,‘a‘)
json.dump(item_list,f,ensure_ascii=False)
f.close()

Chrome浏览器安装插件

在线安装

  1. 下载插件 - google访问助手
  2. 安装插件 - google访问助手: Chrome浏览器-设置-更多工具-扩展程序-开发者模式-拖拽(解压后的插件)
  3. 在线安装其他插件 - 打开google访问助手 - google应用商店 - 搜索插件 - 添加即可

离线安装

  1. 下载插件 - xxx.crx 重命名为 xxx.zip,解压不解压都可以,我没解压
  2. 打开Chrome浏览器 -> 右上角设置 -> 更多工具 -> 扩展程序 -> 点开开发者模式
  3. 把相关插件文件夹 拖拽 到浏览器中,释放鼠标即可安装
  4. 重启浏览器,使插件生效

爬虫常用插件插件

  1. google-access-helper : 谷歌访问助手,可访问 谷歌应用商店
  2. Xpath Helper: 轻松获取HTML元素的xPath路径,开启/关闭: Ctrl + Shift + x
  3. Proxy SwitchyOmega: Chrome浏览器中的代理管理扩展程序
  4. JsonView: 格式化输出json格式数据

原文地址:https://www.cnblogs.com/LXP-Never/p/11360615.html

时间: 2024-10-16 12:31:50

爬虫总结的相关文章

开始我的Python爬虫学习之路

因为工作需要经常收集一些数据,我就想通过学爬虫来实现自动化完成比较重复的任务. 目前我Python的状况,跟着敲了几个教程,也算是懂点基础,具体比较深入的知识,是打算从做项目中慢慢去了解学习. 我是觉得如果一开始就钻细节的话,是很容易受到打击而放弃的,做点小项目让自己获得点成就感路才更容易更有信心走下去. 反正遇到不懂的就多查多问就对了. 知乎上看了很多关于入门Python爬虫的问答,给自己总结出了大概的学习方向. 基础: HTML&CSS,JOSN,HTTP协议(这些要了解,不太需要精通) R

爬虫难点分析

难点分析 1.网站采取反爬策略 2.网站模板定期变动 3.网站url抓取失败 4.网站频繁抓取ip被封 1.网站采取反爬策略 >网站默认对方正常访问的方式是浏览器访问而不是代码访问,为了防止对方使用大规模服务器进行爬虫从而导致自身服务器承受过大的压力,通常网站会采取反爬策略 根据这一特性,我们用代码模拟实现浏览器访问 2.网站模板定期变动-解决方案 >标签变动,比如<div>变动,那么我们不能把代码给写死了 (1)不同配置文件配置不同网站的模板规则 (2)数据库存储不同网站的模板规

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

Python有了asyncio和aiohttp在爬虫这类型IO任务中多线程/多进程还有存在的必要吗?

最近正在学习Python中的异步编程,看了一些博客后做了一些小测验:对比asyncio+aiohttp的爬虫和asyncio+aiohttp+concurrent.futures(线程池/进程池)在效率中的差异,注释:在爬虫中我几乎没有使用任何计算性任务,为了探测异步的性能,全部都只是做了网络IO请求,就是说aiohttp把网页get完就程序就done了. 结果发现前者的效率比后者还要高.我询问了另外一位博主,(提供代码的博主没回我信息),他说使用concurrent.futures的话因为我全

Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider/tree/master/jobboleSpider 注:这个文章并不会对详细的用法进行讲解,是为了让对scrapy各个功能有个了解,建立整体的印象. 在学习Scrapy框架之前,我们先通过一个实际的爬虫例子来理解,后面我们会对每个功能进行详细的理解.这里的例子是爬取http://blog.jobb

简谈-网络爬虫的几种常见类型

众所周知,网络爬虫(或称为网络爬虫.网络蜘蛛.机器人)是搜索引擎最上游的一个模块,是负责搜索引擎内容索引的第一关. 很多人为了提高自己网站的索引量,都是去网上随便找一些爬虫工具来使用.但是很多人不知道,这些抓取网站的小爬虫是有各种各样的不同性格的. 常见的优秀网络爬虫有以下几种类型: 1.批量型网络爬虫:限制抓取的属性,包括抓取范围.特定目标.限制抓取时间.限制数据量以及限制抓取页面,总之明显的特征就是受限: 2.增量型网络爬虫(通用爬虫):与前者相反,没有固定的限制,无休无止直到抓完所有数据.

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

爬虫的本质

w机器化的人,超越人. [初码干货]关于.NET玩爬虫这些事 - 初码 - 博客园 http://www.cnblogs.com/printhelloworld/p/6354085.htm "爬虫的本质是对目标WebServer页面行为和业务流程的精准分析,是对HTTP的深刻理解,是对正则.多线程等周边技术以及软件工程的灵活运用"

由爬虫引发的思考

前言 花了两天时间写一个简单的爬虫程序.目前所用的技术十分简单.就是获得目标页面的html文档内容,然后解析其中有用的内容.既没有实现模拟登陆,也没有任何防止反爬虫的措施,甚至没有使用多线程.不过在其中遇到的问题还是引发了我很多的思考与问题,比如爬虫的合法性问题以及爬虫的危害等.于是写下这篇文章记录一下.由于本人经验有限,引用参考了大量文章,有问题请指出. 爬虫的作用与危害 爬虫的作用 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是