python爬虫

Python爬虫基础

。_饼干妹妹 提交于 2020-02-12 12:18:25
爬取流程 发送请求——获得页面——解析页面——下载内容——储存内容 基础模块 urllib, urllib2, requests, bs4(Beautifulsoup), pyquery 动态页面 selenium(会了这个配合scrapy无往不利) phantomJS(不显示网页的selenium) 解析语言 正则表达式, XPATH, CSS 遇到反爬虫策略验证码之类 tesserocr等 数据库 mysql, mongodb, redis 爬虫框架 scrapy(推荐), pyspider 爬虫架构:调度器,请求队列,代理池,cookie池等 进阶技术 多线程、分布式(结合scrapy) 来源: CSDN 作者: 罗小爬EX 链接: https://blog.csdn.net/luo15242208310/article/details/104222361

Python爬虫5.5 — scrapy框架logging模块的使用

倾然丶 夕夏残阳落幕 提交于 2020-02-12 12:12:05
Python爬虫5.5 — scrapy框架logging模块的使用 综述 log 介绍 关于log等级 logging.getLogger() 日志保存到本地 自定义logger 其他博文链接 综述 本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。 Python 版本是3.7.4 本篇文章主要讲解日志模块(logging)的使用。 log 介绍 在第一篇入门文章中我们嫌打印的日志信息过多,稍微对日志设置了一下打印等价: LOG_LEVEL = "WARNING" 仅打印 WARNING 等级及其以上的日志信息。 关于log等级 Scrapy提供5层logging级别: CRITICAL - 严重错误(critical) ERROR - 一般错误(regular errors) WARNING - 警告信息(warning messages) INFO - 一般信息(informational messages) DEBUG - 调试信息(debugging messages) 上述对应等级的信息我们可以分别使用对应的函数进行输出: logging.critical() 、 logging.error() 、 logging.warning() 、 logging.info() 、 logging

Python爬虫——定向爬取“中国大学排名网”

烈酒焚心 提交于 2020-02-12 12:06:19
内容整理自中国大学MOOC——北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节 我们预爬取的url如下 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html 网页节选 在浏览器中读取网页源代码 可以 发现表格数据信息是直接写入HTML页面信息中,所以我们可以直接采取定向爬虫操作。 我们的整体设计思路如下: 1.从网络上获取大学排名网络内容 2.提取网页内容中信息到合适的数据结构 3.利用数据结构展示并输出结果 仔细观察可以发现,HTML的结构中,每个<tr>标签包含一所大学的全部信息,而一组<tr>内,大学的校名、省市、名次等信息由<td>标记 所有<tr>均为<tbody>的子节点 根据设计思路几网页结构信息,代码如下 1 import requests 2 from bs4 import BeautifulSoup 3 import bs4 4 5 def getHTMLText(url): #获取url信息 6 try: 7 r = requests.get(url,timeout = 30) 8 r.raise_for_status() 9 r.encoding = r.apparent_encoding 10 return r.text 11 except: 12 return "" 13 14 def

伯乐身高爬虫

那年仲夏 提交于 2020-02-12 08:59:31
最近在朋友的博客里看到了一篇文章,是讲伯乐在线这个网站上有一个面向对象栏目。什么是面向对象呢,面向对象是一个专门为IT单身男女服务的征友传播平台,由伯乐在线专门为程序员爱情创立的一个公益+免费活动。简单来说,网站的女用户在这个栏目组发帖子,包括自己的相关信息,以及理想的男友条件,男生们可以付出一定代价获得女用户保存在网站上的个人联系方式,看对眼的话,就去领证:) 然后呢,我这个朋友关注的点不太主流,他不用爬虫爬妹子照片,或者通过黑客攻击拿到妹子的联系方式,反而用python将所有发表的帖子当中对身高的要求给爬了..> 下面是我将他的代码改进: import requests import re import os import sys import time from bs4 import BeautifulSoup pageNum = 10 # 所有帖子总共10页 urlsFile = os.path.join(sys.path[0],'urls.txt') # 保存帖子url的本地路径的字符串,os.path.join()知识提供文件路径拼接功能 如果想要创建文件夹 则使用os.mkdir(path) infoNum = 0 #有效信息的总条数 num = 0 #包含敏感信息的总条数 # 获取所有帖子的url def getUrls(): if(os.path.exists

零基础入门python爬虫(一)

為{幸葍}努か 提交于 2020-02-11 23:43:56
✍写在前面 : 欢迎加入纯干货技术交流群Disaster Army:317784952 接到5月25日之前要交稿的任务我就一门心思想写一篇爬虫入门的文章,可是我并不会。还好有将近一个月的时间去学习,于是我每天钻在书和视频教程里。其实并不难的,我只是想做到能够很好的理解它并用自己的语言较好的表达出来,也许你将看到的是史上最不专业的技术交流文章,没错这就是我想要的。我力求能让没有编程基础同我一样爱黑客技术却苦于看不到出路的同学们在24小时之内明白爬虫是怎么一回事。我想这才是我加入中国红客联盟太极实验室在红客精神的号召下做的有意义的事。学习技术一定要学会付出、开源、共享、互助,很多大牛似乎不愿意这么做了,我们入门小菜鸟只要够团结,乐于奉献就一定可以达到1+1>2的双赢效果。总之共同努力吧! ☝第一章 0x00 python的认识、安装 官面上的话自行去百度,这里我只介绍我所掌握到的、最重要的信息。 特点: (1)跨平台开发 (2)以语法简洁清晰著称 (3)缩进控制严格 至于说爬虫需不需要编程基础,不用多说,君不见本屌在这个月之前的n多个月里是多么苦苦的啃教程,对么下三赖的求指点。其实自学的进步速度太慢了,此文也希望看到的码阔多多提点! 更多信息: python百度百科 安装也是极易的,只是有python2.7和python3需要纠结选一下。菜菜也不多做建议了,各有所长

拒绝低效!Python教你爬虫公众号文章和链接

99封情书 提交于 2020-02-11 23:40:10
本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权。 前言 上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只能一篇篇的选择,是个单选框。 面对几百篇的文章,这样一个个选择的话,是一件苦差事。 pk哥作为一个 Pythoner,当然不能这么低效,我们用爬虫把文章的标题和链接等信息提取出来。 抓包 我们需要通过抓包提取公众号文章的请求的 URL,参考之前写过的一篇抓包的文章 Python爬虫APP前的准备 ,pk哥这次直接抓取 PC 端微信的公众号文章列表信息,更简单。 我以抓包工具 Charles 为例,勾选容许抓取电脑的请求,一般是默认就勾选的。 为了过滤掉其他无关请求,我们在左下方设置下我们要抓取的域名。 打开 PC 端微信,打开 「Python知识圈」公众号文章列表后,Charles 就会抓取到大量的请求,找到我们需要的请求,返回的 JSON 信息里包含了文章的标题、摘要、链接等信息,都在 comm_msg_info 下面。 这些都是请求链接后的返回,请求链接 url 我们可以在 Overview 中查看。 通过抓包获取了这么多信息后,我们可以写爬虫爬取所有文章的信息并保存了。 初始化函数 公众号历史文章列表向上滑动,加载更多文章后发现链接中变化的只有 offset 这个参数

爬虫遇到521错误怎么办

拟墨画扇 提交于 2020-02-11 20:40:10
  本人最近用 python 开发着爬虫相关的项目,在上个月就已经把爬虫的相关代码写得差不多了,因为春节,项目停滞了十多天。最近,当我再次运行之前的爬虫项目的时候, What ?怎么不行了??本来好好的,报了 521 错误。我只是一个爬虫菜鸟,还是第一次接触到这个错误。然后我就去百度了。百度一圈后,发现这是一个 js 设置 cookie 的反爬方式。于是乎我将 521 返回的内容写到了 txt 文件里,显示出来是这样的结果。    太乱了,这样子啥也看不出来呀。后来突然想到,这就是 js 代码呀,写到 html 文件里再排版不就行了吗。这里说一下我用的编辑器是pycharm,打开了html代码后,使用快捷键'crtl+alt+l'一键排版,就好看多了。   随后,我百度到,把这一串代码的js部分复制到Console中,将eval改成console.log运行。 结果出现了这个错误,没怎么接触前端的我就傻逼了,这啥错啊。   又百度了一会才发现,原来在后面的</script>前还有一个‘}’,写上去之后,可以正常运行了。得到了这个结果。   一看,怎么这么眼熟,这就是js里面的代码呀。然后我就想,打印出了这个结果,那是不是执行过程中,js会将这两行代码替换上去再执行的呢。然后我就将两行eval替换成打印出来这两行后再去执行。突然页面就直接跳转了一下。嗯?怎么就跳转了呢?后来想到

爬虫基础 || 1.1 urllib 基础介绍

北城余情 提交于 2020-02-11 16:58:50
疫情爆发的第20天,在家办公,比较闲。 曾经作为一名爬虫工程师,已经一年多没写过爬虫了,这几天翻了翻资料和崔老师的《网络爬虫开发》,对爬虫做一次复习,顺便写下这篇学习笔记,慢慢更新,欢迎大家交流学习~~ 这篇写的是爬虫基础库urllib的一下基础知识。他包含下面四个主类。 =========================================================================== 1.request:它是最基本的 HTTP 请求模块,可以用来模拟发送请求。 就像在浏览器里输入网挝 然后回车一样,只需要给库方法传入 URL 以及额外的参数,就可以模拟实现这个过程了。 2.error: 异常处理模块,如果出现请求错误, 我们可以捕获这些异常,然后进行重试或其他操 作以保证程序不会意外终止。 3.parse: 一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、 合并等。 4.robotparser:主要是用来识别网站的robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬,它其实用得比较少。 =========================================================================== 接下来开始介绍request 1.1.1 发送请求 urlopen()

Python爬虫老是被封的解决方法【面试必问】

旧城冷巷雨未停 提交于 2020-02-11 11:58:49
在爬取的过程中难免发生 ip 被封和 403 错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下 Python 爬虫 动态 ip 代理 防止被封的方法。 PS:另外很多人在学习Python的过程中,往往因为遇问题解决不了从而导致自己放弃,为此我建了个Python全栈开发交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新Python教程项目可拿,不懂的问题有老司机解决哦,一起相互监督共同进步 \ 首先,设置等待时间: \ 常见的设置等待时间有两种,一种是显性等待时间(强制停几秒),一种是隐性等待时间(看具体情况,比如根据元素加载完成需要时间而等待)图 1 是显性等待时间设置,图 2 是隐性。 第二步,修改请求头: \ 识别你是机器人还是人类浏览器浏览的重要依据就是 User-Agent,比如人类用浏览器浏览就会使这个样子的 User-Agent:’Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36’ 第三步,采用代理 ip / 建代理 ip 池 \ 直接看代码。利用动态 ip 代理,可以强有力地保障爬虫不会被封,能够正常运行。图 1 为使用代理 ip 的情况,图 2 是建

python爬虫爬取王者荣耀官网全部英雄技能信息(源码分享)

巧了我就是萌 提交于 2020-02-11 06:21:39
这篇文章为源码分享,爬虫的分析过程请阅读文章 《用python爬取王者荣耀官网的英雄皮肤海报(含源码)》 源码 import requests import json from bs4 import BeautifulSoup headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5958.400 SLBrowser/10.0.3533.400' } def GetSoup ( url ) : resp = requests . get ( url , headers = headers ) resp . encoding = 'gbk' soup = BeautifulSoup ( resp . text , 'lxml' ) return soup #获取json数据,并解析成存有英雄id与名字的列表[[id,name],[id1,name1].......] def jsonToHeroInfoList ( jsonURL ) : resp = requests . get ( jsonURL ) jsonData = json .