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

  

  

posted @ 2021-07-08 08:45  沈渃溪  阅读(39)  评论(0编辑  收藏  举报