网络爬虫
1几年开始学习爬虫,也很久了,发现自己什么都会 也不会,经常把以前学的忘得一干二净,加上英语差 今天学明天忘。把以前的笔记和自己写过的代码整理一下,方便以后失忆了查阅。
虽然很菜,但是可以在小白面前装逼呀!
旧人小表弟
13年进机械厂打工,15年从工厂跑了,自此开始颓废,至今一无是处,曾经有段时间靠花呗信用卡勉强度日,接触过各种项目/套路,玩什么都输,做什么事都不成;26个字母都认不全却非要坚持搞编程,现在会点皮毛了更是高不成低不就;17年-19年是撸羊毛的红利年,各种活动无脑刷批量注册,一夜百万的比比皆是,自己玩却是倒贴钱;瞎倒腾几年post、网络爬虫,才会点皮毛,无用武之地。
展开
-
Python_requests库:参数和cookie补充
网友在post一个网站登录页面的时候,总是不成功,找我来试试抓个包,然后用发包工具测试了一下,没有任何加密和其他特殊的协议头、参数什么的,但是始终返回-1,表示不成功,网站看起来很老、很奇葩看下登陆成功会返回什么:用谷歌浏览器抓post请求的时候,响应里是看不到返回数据的,所以用火狐浏览器试了一下,发现即使是手动登陆也经常登不上,需要登录两次,第一次返回-1,然后再点一次登录,会提交第一次的cookie去登录,所以抓包的时候,一定要清除浏览器cookie,因为火狐浏览器是第一次抓这个网站的包,但是谷歌浏原创 2020-12-29 15:04:40 · 253 阅读 · 1 评论 -
分布式爬虫 Scrapy-Redis案例:搜房网房天下
创建爬虫爬虫部分代码items.pymiddlewares.pypipelines.pysettings.py部署多台服务器-执行分布式爬虫原创 2020-12-12 18:18:59 · 441 阅读 · 2 评论 -
Python:导出本机已安装所有环境库到另一台机器
原创 2020-12-11 19:17:49 · 890 阅读 · 0 评论 -
分布式爬虫:Scrapy-Redis
Scrapy是一个框架,他本身是不支持分布式的。如果我们想要做分布式的爬虫,就需要借助一个组件叫做Scrapy-Redis,这个组件正是利用了Redis可以分布式的功能,集成到Scrapy框架中,使得爬虫可以进行分布式。可以充分的利用资源(多个ip、更多带宽、同步爬取)来提高爬虫的爬行效率。分布式爬虫的优点:可以充分利用多台机器的带宽可以充分利用多台机器的ip地址多台机器做,爬取效率更高分布式爬虫必须要解决的问题:分布式爬虫是好几台机器在同时运行,如何保证不同的机器爬取页面的时候不会出.原创 2020-12-09 23:22:07 · 595 阅读 · 0 评论 -
分布式爬虫:redis数据库介绍
redis是一种支持分布式的nosql数据库,它的数据是保存在内存中的,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且它比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))相关参考文档:http://redisdoc.com/index.htmlredis使用场景登录会话存储:存储在redis中,与memcached相比,数据不会丢失排行版/计数器:比如一些秀场类的项目,.原创 2020-12-09 22:55:48 · 352 阅读 · 0 评论 -
Scrapy:在Scrapy中使用selenium来爬取简书全站内容,并存储到MySQL数据库中
创建爬虫scrapy startproject jianshucd jianshuscrapy gensipder -c crawl jianshu_spider “jianshu.com”爬虫代码# -*- coding: utf-8 -*-import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom pa_chong.Scrap原创 2020-12-08 22:22:05 · 260 阅读 · 0 评论 -
Scrapy:boos直聘爬虫案例
爬虫代码# -*- coding: utf-8 -*-import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom pa_chong.Scrapy.boos.boos.items import BoosItemclass ZhipingSpider(CrawlSpider): name = 'zhiping' allowe原创 2020-12-07 23:21:25 · 1493 阅读 · 2 评论 -
Scrapy:使用下载器中间件设置随机ua和代理ip
爬虫代码# -*- coding: utf-8 -*-import scrapyimport jsonclass HttpbinSpider(scrapy.Spider): name = 'httpbin' allowed_domains = ['httpbin.org'] start_urls = ['http://httpbin.org/user-agent'] def parse(self, response): user_agent =原创 2020-12-06 20:55:19 · 1002 阅读 · 1 评论 -
Scrapy:下载器中间件介绍
Downloader Middlewares(下载器中间件)下载器中间件是引擎和下载器之间通行的中间件,在这个中间件中可以设置代理、更换请求头… 来达到反反爬虫的目的。要写下载器中间件,可以在下载器中实现两个方法:process_request(self, request, spider):这个方法是在请求发送之前执行process_response(self, request, response, spider):这个方法是在数据下载到引擎之前执行process_request(self, re原创 2020-12-05 18:35:37 · 370 阅读 · 0 评论 -
Scrapy框架:下载文件和图片
修改settings.py代码ROBOTSTXT_OBEY设置为False设置DEFAULT_REQUEST_HEADERS要激活pipelines,应该在settings.py中设置ITEM_PIPELINES‘bmw.pipelines.BmwPipeline’: 300, 是默认的‘scrapy.pipelines.images.ImagesPipeline’: 1 是Scrapy模块内部定义好的图片下载器pipelines‘bmw.pipelines.BMWImagesPipe原创 2020-12-05 17:34:33 · 683 阅读 · 0 评论 -
Scrapy框架:Request和Response对象,使用Request发送get请求、FormRequest发送post请求
创建爬虫scrapy startproject renrencd renrenscrapy gensipder -c crawl renren_login "renren.com"修改settings.py代码爬虫部分代码 # -*- coding: utf-8 -*-import scrapy'''登录人人网,访问大鹏页面 post、get请求'''class RenrenLoginSpider(scrapy.Spider): name = 'renren_原创 2020-12-01 15:10:39 · 2758 阅读 · 0 评论 -
Scrapy框架:微信小程序社区CrawlSpider案例
修改settings.py代码爬虫部分代码# -*- coding: utf-8 -*-import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom pa_chong.Scrapy.wxapp.wxapp.items import WxappItemclass WxappSpiderSpider(CrawlSpider):原创 2020-11-30 18:21:53 · 225 阅读 · 1 评论 -
Scrapy框架:CrawlSpider和Scrapy Shell
CrawlSpider在上一篇文章爬虫案例中,我们是自己在解析完整个页面后获取下一页的url,然后重新发送一个请求。有时候我们的需求是:只要满足某个条件的url,都进行爬取。这时候就可以通过CrawlSpider来完成了。CrawlSpider继承自Spider,只不过是在之前的基础之上增加了新的功能,可以定义爬取的url的规则,以后scrapy碰到满足条件的url都进行爬取,而不用手动的yield Request。创建CrawlSpider爬虫之前创建爬虫的方式是通过scrapy genspide原创 2020-11-26 15:14:29 · 206 阅读 · 0 评论 -
Scrapy框架:入门介绍
Scrapy框架介绍Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services)或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。发送网络请求、数据解析、数据存储、反反爬虫机制(更换ip代理、设置请求头等)、异步请求等。这些工作如果每次都要自己原创 2020-11-25 16:49:19 · 521 阅读 · 0 评论 -
Tesseract案例1
import pytesseractfrom urllib import requestimport refrom PIL import Imagefrom http.cookiejar import MozillaCookieJarimport randomimport threadingcookiejar = MozillaCookieJar('cookie.txt') # 用MozillaCookieJar类创建cookiejar对象,设置cookie保存路径 文件名handle原创 2020-11-07 00:01:23 · 154 阅读 · 0 评论 -
ocr初体验,Tesseract,简单的图片验证码识别
图片验证码现在已经不怎么多了,打码平台都已经没什么市场了,现在随便一个现成的通杀库都可以识别所有类型的图片验证码,于是乎稍微大一点的网站都会使用滑块、点选这些行为验证来防刷、防爬了!一般图片验证码、各种滑块都是使用Python来训练的,往大了说这些都属于神经网络的事情了。pytesseract...原创 2020-11-02 22:58:18 · 603 阅读 · 0 评论 -
Python爬虫:整理selenium经常遇到的一些坑,无法定位元素、网站反爬虫监测、请求头、页面滚动,你要的可能都在这里 - 旧人笔记
selenium这种模拟浏览器的操作,虽然简单,但是代码量大,非常繁琐,且在使用过程中会遇到各种坑,不像请求接口,直接发get、post包就行了!无法定位元素页面元素还没加载出来frame/iframe二次定位 如:弹出框登录不可见元素绕过网站监测添加请求头页面滚动...原创 2020-10-19 18:03:33 · 3347 阅读 · 1 评论 -
selenium爬虫案例
爬拉勾网以前看视频教程的练习例子,现在应该用不了了使用requests 数据请求爬取import requestsfrom lxml import etreeimport timeimport reheaders = { 'Referer': 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=' 'false&fromSearch=true&la原创 2020-10-18 16:50:54 · 818 阅读 · 1 评论 -
Python爬虫,使用selenium爬取动态生成的网页数据 - 旧人笔记 - 旧人学习笔记 - 爬虫笔记 - 网络爬虫大白话
什么是AJAXAJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML,在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面。因为传统的在传输数据格式方面,使用的是XML语法,因此叫做AJAX,其实现在数据交互基本上都是使用JSON,很少使用XML了。使用AJAX加载的数据,即使执行了JS代码 将数据渲染到了原创 2020-10-17 20:04:38 · 1732 阅读 · 2 评论 -
xpath补充:lxml.etree常用方法,使用selenium、xpath定位不到标签时处理办法
获取属性的值和标签中的文本有时候不能直接定位到标签的属性,需要首先定位到webelement,之后get到属性try: temp['host_url'] = node.find_element_by_xpath('./div/div/div/ytd-video-meta-block/div/div/div/yt-formatted-string/a/@href') temp['host_url'] = node.find_element_by_xpath('./div/div/div/ytd原创 2020-10-16 23:28:46 · 2147 阅读 · 1 评论 -
Python多线程,大杂烩
搞任何编程语言肯定都离不开多线程,Python肯定也不例外,虽然Python的多线程并不完美,但还是经常会用到滴,尤其是网络爬虫这些东西,效率很很重要,所以我就屁颠屁颠的来写这篇文章啦!多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率,线程是在同一时间需要完成多项任务的时候实现的。多线程就像火车的每一节车厢,而进程则是火车,车厢离开火车是无法跑动的,火车可以有多节车厢,多线程的出现就是为了提高效率,同时使用它也会带来了一些问题。threading模块threading模块是py原创 2020-10-13 20:45:15 · 371 阅读 · 1 评论 -
数据存储:Python对MongoDB数据库操作
MongoDB是一个基于分布式文件存储的NoSQL数据库(非关系型数据库),在处理海量数据的对候会比MySQL(关系型数据库)更有优势。下载地址:https://www.mongodb.com/try/download/community下载后下一步下一步安装即可,安装目录最好不要有中文或特殊字符安装过程中 勾选Install MongoDB Compass这个选项,可以同时安装一个类似navicat的可视化工具运行MongoDB1、创建数据目录启动MongoDB之前,要先指定一个数据存储的原创 2020-10-11 21:09:35 · 587 阅读 · 0 评论 -
数据存储:Python对MySQL数据库操作
安装mysql官网下载地址:https://dev.mysql.com/downloads/windows/installer/5.7.html如果提示没有.NET Framework框架,在提示框中找到下载链接,下载一个就可以了。如果提示没有Microsoft Virtual C++ x64(x86),百度或谷歌一下这个软件,安装即可。navicatnavicat是一个操作mysql数据库非常方便的可视化软件,使用它操作数据库,就像excel一样的简单。安装驱动程序Python要想操作MyS原创 2020-10-11 19:19:18 · 199 阅读 · 0 评论 -
数据存储:CSV文件读取和存储
import csv读取CSV文件1、csv.reader() 返回列表 通过下标方式获详细内容def read_csv_demo1(): """返回列表_通过下标方式获详细内容""" with open(r'C:\Users\Administrator\Desktop\classroom1.csv') as f: reader = csv.reader(f) # 把文件指针传给csv.reader()方法并赋值给reader,返回一个迭代器 #原创 2020-10-11 16:33:10 · 1000 阅读 · 2 评论 -
关于Python的编码,字符串、bytes字节之间的转换,计算机文本文件的编码
字符串二进制编码代码点对应的字符print(ord('A')) # 65print(chr(104)) # hprint(chr(202)) # Êprint(ord('Ê')) # 202print(ord('我')) # 25105print(chr(25105))编码转换 内置的方法:str.encode(‘编码’) 、 bytes.decode(‘解码’)字节和字符串之间转换s1 = 'ABCD'print(s1.encode('ASCII'))# 结原创 2020-10-01 17:28:36 · 1591 阅读 · 0 评论 -
数据存储:json和文件存储时 一些编码问题
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。上面一大段话可以简单理解为:json就是JavaScript的一种衍生,用JavaScript的对象、数组来包含一系列的内容。JSON支持数据格式:原创 2020-10-01 16:03:24 · 2675 阅读 · 0 评论 -
爬虫案例:正则表达式的应用
import requestsimport redef parse_page(url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/70.0.3538.102 Safari/537.36' } response = reques原创 2020-09-30 18:07:20 · 192 阅读 · 0 评论 -
数据解析:正则表达式2,re、findall、match、search、finditer、编组
上一篇文章大概介绍了一下正则表达式和Python中如何使用正则表达式https://blog.csdn.net/weixin_43040873/article/details/108883881这篇文章继续深挖一下re模块下的几个方法的一些特性,以及最后我会放一张以前学习时的思维导图re模块下的正则匹配方法findall()import retext = "Tom is 8 years old. Mike is 25 years old."pattern = re.compile('\d+原创 2020-09-30 18:03:53 · 360 阅读 · 0 评论 -
数据解析:正则表达式,Python中使用正则 模块和常用的方法
按照一定的规则,从某个字符串中匹配出想要的数据,这个规则就是正则表达式,正则表达式是匹配文本最快、最精准的一种方式,但是相对比较难,每一种编程语言都支持正则表达式,其匹配规则都是通用的常用匹配规则import re # 导入re模块匹配某个字符串text = 'hello'ret = re.match('he',text)# re.match是Python使用正则的一个方法,第一个参数是正则表达式,第二个是要匹配的字符串,除了re.match还有其他几个方法,后面会详细讲解各自的使用pr原创 2020-09-30 15:49:09 · 332 阅读 · 0 评论 -
数据解析:PyQuery使用范例
个人觉得PyQuery解析库,类似Beautiful Soupfrom pyquery import PyQuery as pq # 导入库# 1、字符串的初始化html = '''<div> <ul> <li class="item-0">first item</li> <li class="item-1"><a href="link2.html">second item<原创 2020-09-29 17:14:06 · 291 阅读 · 0 评论 -
requests、Beautiful Soup、Bar综合案例
import requestsfrom bs4 import BeautifulSoupfrom pyecharts import BarALL_DATA = []def patse_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'C原创 2020-09-27 00:53:50 · 154 阅读 · 0 评论 -
数据解析:Beautiful Soup的使用4,知识点补充
html = """<table class="tablelist" cellpadding="0" cellspacing="0"> <tbody><tr class="h"> <td class="l" width="374">职位名称</td> <td>职位类别</td> <td>人数</td> <td>原创 2020-09-27 00:52:09 · 574 阅读 · 0 评论 -
数据解析:Beautiful Soup的使用3,select(css选择器)使用案例
html = """<table class="tablelist" cellpadding="0" cellspacing="0"> <tbody><tr class="h"> <td class="l" width="374">职位名称</td> <td>职位类别</td> <td>人数</td> <td>原创 2020-09-27 00:50:00 · 734 阅读 · 0 评论 -
数据解析:Beautiful Soup的使用2,find、find_all使用案例
html = """<table class="tablelist" cellpadding="0" cellspacing="0"> <tbody><tr class="h"> <td class="l" width="374">职位名称</td> <td>职位类别</td> <td>人数</td> <td>原创 2020-09-27 00:45:13 · 1898 阅读 · 1 评论 -
数据解析:Beautiful Soup的使用
简介和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是解析和提取 HTML/XML 数据。lxml只是局部遍历,而Beautiful Soup 是基于HTML DOM(Document Object Model)的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的原创 2020-09-27 00:29:19 · 521 阅读 · 0 评论 -
requests、xpath应用案例
以后每天写一两篇文章,大概一个月左右能把以前学爬虫的笔记整理好,孬好就这样了,以后去工厂还是工地都无所谓了,不纠结到底做什么了,反正编程只是爱好~爬豆瓣import requestsfrom lxml import etree'''1. 将目标网站上的页面抓取下来'''headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Ch原创 2020-09-26 17:03:02 · 607 阅读 · 0 评论 -
数据解析:xpath(xml)的使用,大白话总结、常用语法、及一些小细节
大概使用方法介绍使用//标签名 获取整个页面当中的某个节点元素,然后通过子节点、属性、谓词进行提取。'//div[@class="abc"]'/和//的区别如果是在最前面,代表从根节点选取。否则选择某节点下的节点。/代表只获取直接子节点,//是获取子孙节点。'//div[@class="abc"]/a[2]' 表示在整个页面(根节点)寻找class="abc"的div标签下的第二个a标签containscontains:某个元素的属性包含了多个值,可以使用contains函数(模糊匹原创 2020-09-26 16:04:55 · 2133 阅读 · 0 评论 -
requests库:网络请求、反爬虫(请求头、代理、cookie)
requests库安装通过pip安装直接在cmd输入:pip install requests 即可安装或者通过pycharm安装get请求发送get请求,直接通过requests.get(),传入url地址、params、headers即可提交参数不需要自己进行url编码,模块会编码好import requestsresponse = requests.get('http://www.baidu.com')print(type(response.text)) # 使用.te原创 2020-09-25 21:18:30 · 680 阅读 · 1 评论 -
urllib库:网络请求,url编码,url分解,反爬虫(请求头、代理、cookie)
通常 网页请求、下载保存网页(图片)、参数编码、解码 会用到这个库发送请求-保存网页文件(图片):使用urllib下的request导入urllib下的request库from urllib import requesturlopen()方法用法:发送请求 模拟访问网页resp = request.urlopen('http://www.baidu.com')# 参数1是请求的url地址;参数data=是提交参数,默认None(get方式),有参数就是post方式获取返回信息:# 返.原创 2020-09-24 20:51:29 · 1294 阅读 · 0 评论