爬虫技能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hephec/article/details/78268542
爬虫技能:
1.初见爬虫
浅析HTTP协议
Requests库的7个主要的方法
【requests,requests.get,requests.head,requests.post,requests.put,requests.patch,requests.delete】


2.Robots协议
【User-Agent,Disallow,URL,ALLOW,Sitemap】

3.网页解析
BeautifulSoup的解析器
【html.parser,lxml,html5lib】
BeautifulSoup类的基本元素
【Tag,Name,Attributes,NaviableString,Comment】
BeautifulSoup的遍历功能
【上行遍历,下行遍历,平行遍历】
【下行遍历:.contents,.children,.descendants】
【上行遍历,平行遍历:.next_sibling,.previous_sibling,.next_sibling,.previous_siblings】

4.正则表达式


5.爬虫框架Scrapy
Scrapy爬虫框架结构
【Engine,Downloader,Scheduler,Spider,Item Pipelines】
数据流

1.引擎打开一个网站(open a domain),找到处理该网站的Spider并向该Spider请求第一个要爬取的URL(s)
2.引擎从Spider中获取到第一个要爬虫的URL并在调度器(Scheduler)以Request调度
3.引擎向调度器请求下一个要爬取的URL
4.调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)
5.一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎
6.引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理
7.Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎
8.引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器
9.(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站

6.分布式爬虫
多线程爬虫
多进程爬虫
7.异步网站数据采集
8.爬虫的存储
媒体文件
把数据存储到CSV文件
MySQL
9.爬虫的常见技巧
【模拟登陆,网页验证码】
10.防爬虫
---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
scrapy runspider somefile.py -o xx.csv
1.在somefile.py文件中找到已定义的爬虫,然后通过抓取引擎运行爬虫
2.具体的抓取过程:
使用start_urls作为初始url生成Request,默认吧parse作为他的回调函数
在parse中采用css选择器或得目标URL,并注册parse_question作为目标url的回调函数
背后的处理:
1.请求被异步的调度,处理
2.有一些参数可以控制过程,比如每个域名.ip并发请求数,请求之间的下载延迟(或自动调节)


高级特性:
1.scrapy shell交互式控制台用于调试数据抽取方法
2.内置对结果输出的支持,可以保存为JSON,CSV,XML等
3.自动处理编码
4.支持自定义扩展
5.丰富的内置扩展,可用于处理
cookie and session
http feature like compression,authentication,caching
user-agent spoofing
robots.txt
crawl depth restriction
远程调试
可爬取xml,csv,可自动下载


基本使用步骤:
creating a project
defining out item
writing a spider
writing configuration an item Pipelines
execute crawl
---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
scrapy.cfg
__init__.py
items.py
pipelines.py
settings.py
spider/
__init__.py
...
编写一个spider
scrapy genspider demo_spider
复制URL
from tutorial.items import TutorilItem


class DemoSpiderSpider(scrapy.Spider):
name = "demo_spider"
allowed_domains =["demo.org"]
start_urls=(
"",
""
)
def parse(self,response):
#filename = response.split("/")[-2]+".html"
#with open(filename,"wb") as fp:
# fp.write(reponse.body)
#使用css或者Xpath抽取器
lis = reponse.xpath("")
for li in lis:
item = TutorilItem()
item["title"]=li.xpath("a/text()").extract()
item["desc"]=li.xpath("text()")
item["link"]=li.xpath("a/@href").extract()
yield item
运行spider
scrapy crawl demo_spider


定义Item
class tutorialItem(scrapy.Item):
title = scrapy.Field()
desc = scrapy.Field()

---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
scrapy命令行工具
help,version
startproject
genspider
list
view,parse
---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
scrapy重要组件
Spider【scrapy.Spider】

name:spider的名称,要求唯一
allowed_domains:允许的域名
start_urls:初始urls
custom_settings:个性化设置
crawler:抓取器,spider将绑定在他上面
settings:配置实例,包含工程中所有的配置变量
logger:日志实例
子类:
CrawlSpider
XMLFeedSpider
CSVFeedSpider
SitemapSpider

Selector
Items
Pipelines
Request

1.初始化参数,url,callback,method,heades,body,cookies,meta,encoding
priority,don't_filter=Flase,errback


2.其他属性,copy(),replace()


3.实例,生成Request的方法,通过Request传递数据的方法,Request.meta中特殊的关键字
def parse_page1(self,response):
return scrapy.Request("",callback=self.parse_page2)
def parse_page2(self,response):
self.logger.info("Visited %s",reponse.url)

4.子类介绍
FormRequest:【new parameter:formdata,new class method method: from_response】
-实现登录功能
def parse(self,response):
return scrapy.FormRequest.from_response(
response,formdata={"username":"join","password":"secret"},
callback=self.after_login
)
def after_login(self,response):
pass


5.子类实例

Reponse
【class scrapy.http.Reponse(
 url,status=200,headers,body,flags
)】
---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
scrapy内置服务介绍
Logging模块
【基本使用方法
import logging
logging.warning("this is warning")
logging.log(logging.WARNING,"this is a warning")
通过logger记录日志
logger = logging.getLogger(__name__)
logger.warning("this is a warning")
def parse(self,response):
self.logger.info("called on %s",response.url)
和log相关的配置变量
LOG_FILE
LOG_ENABLED
LOG_ENCODING
LOG_LEVEL
LOG_FORMAT
LOG_DATEFORMAT
LOG_STDOUT

Stats Collectons

基本操作
内置可用收集器
class scrapy.statscollectors.MemoryStatsCollector
class scrapy.statscollectors.DummyStatsCollector

Sending-email

基本使用方法
MailSender类介绍
Mail settings

---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
需求分析
分析网站结构
存储方式分析
【文本文件,csv文件,json文件,jsonlines文件,数据库,云存储】


---------------------------------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
---------------------------------------------------------------
数据聚合与分组运算
pandas提供了一个高效灵活的groupby功能
能够对数据集进行切片,切块,摘要等操作
1.根据一个或多个键(可以是函数



















































猜你喜欢

转载自blog.csdn.net/hephec/article/details/78268542
今日推荐