python 爬虫
安装
pip install requests
requests模块的使用方法
requests.get() requests.post() requests.delete() requests.put() requests.options() requests.requests( method='post', url='', parmas='{}' ,#地址栏后面加数据 data={},#要发送的数据 headers={ 'Referer':'', #上一次访问的地址 'User-Agent':'', #模拟浏览器访问 }, json={}, cookies={}, cert={},#https认证文件证书 verify=True #是否携带证书文件 }
BeautifulSoup 文件解析
安装
pip3 install Beautifulsoup4
使用
soup =BeautifulSoup('处理的html','lxml') soup.p #查看第一个p标签 soup.a #查看第一个a标签 soup.find_all('a') #查看所有的a标签
soup.p.text()#取文本
soup.find.all(atrrs={"class"="ss"}) # 查找属性和属性名
soup.select('.class属性名','标签') #属性选择器
selenium 的使用
安装
http://npm.taobao.org/mirrors/chromedriver/2.35/
if mac系统:
然后将解压后的chromedriver移动到/usr/local/bin目录下
if window系统:
下载chromdriver.exe放到python安装路径的scripts目录中即可,注意最新版本是2.38,并非2.9
scrapy 框架
#Linux: pip3 install scrapy #Windows: a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl d. pip3 install pywin32 e. pip3 install scrapy
创建scrapy 项目
scrapy startproject 项目名
cd 项目名
scrapy genspider 应用名称 # 创建爬虫程序
scrapy crawl 应用名称 --nolog
scrapy crawl qiubia.py -o qiubai.json # 将解析的爬虫数据存储json文件中
设置修改settings.py配置文件相关配置
修改内容及其结果如下: 19行:USER_AGENT= 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份 22行:ROBOTSTXT_OBEY= False #可以忽略或者不遵守robots协议
默认只能在终端执行命令,为了更便捷操作
#在项目根目录下新建:entrypoint.py
from scrapy.cmdline import execute execute(['scrapy','crawl','bilibili'])
在中间件里换IP代理
prqroxy = "ip加port" request.meta[ ' download timeout'] = 20 request.meta[ "proxy"] = proxy rereturn None
在下载中间件中添加动态数据加载出来的数据
def __init__(self): self.bro = webdriver.Chrome(executable_path='A:\chromedriver') #操作的驱动程序的路径 def closed(self,spider): self.bro.quit() #结束爬虫
在spider中类实例化时 创建
def process_response(self, request, response, spider): # Called with the response returned from the downloader. spider.bro.get(url=request.url) #需要篡改的请求 spider.bro.execute_script() # 执行需要js代码 # Must either; # - return a Response object # - return a Request object # - or raise IgnoreRequest #篡改后的新的响应数据 #页面数据就包含了动态页面加载出的数据了 page_text = spider.bro.page_source return HtmlResponse(url=spider.bro.current_url,body=page_text)
基于redis 实现分布式爬虫
安装 scrapy-redis
导入from scrapy_redis.spiders import RedisCrawlSpider
把spider爬虫类继承换成RedisCrawlSpider
添加一个 redis_key 的值 后期再redis中 lpush 的key
更改redis的配置文件
bind
protected-mode no 有yes 改为no
在 settings.py中
REDIS_HOST = 地址
REDIS_PORT = 6379
使用scrapy_redis 组件的调度器
DUPEFILTER_CLASS = 'scrapy.redis.dupefilter.RFPDupeFilter'
在配置共享的管道
'scrapy_redis.pipelines.RedisPipeline' = 400
最后执行爬虫文件
scrapy runspider py文件
开启redis 开启redis客户端 lpush key 起始url