scrapy 파충류 프레임 실전
Scrapy 는 기능 이 완 선 된 파충류 구조 로 강력 한 특성 을 제공 하여 기어 오 르 는 것 을 더욱 간단 하고 효율 적 으로 한다. 예 를 들 어:
우리 파충류 가 되 어 기어 가자.http://www.iteye.com/news다음 정 보 를 mongodb 에 저장 합 니 다.
우선 로 컬 프로젝트 디 렉 터 리 에서 다음 작업 을 수행 합 니 다.
scrapy startproject myspider --nolog #myspider project_name
프로젝트 구조 및 설명
scrapy.cfg
: 프로젝트 의 프로필 myspider/
: 이 프로젝트 의 python 모듈 입 니 다.나중에 코드 를 추가 하 겠 습 니 다.myspider/items.py
: 프로젝트 중의 item 파일. myspider/pipelines.py
: 프로젝트 중의 pipelines 파일. myspider/settings.py
: 프로젝트 의 설정 파일. myspider/spiders/
: spider 코드 를 설치 한 디 렉 터 리 입 니 다. items. py 추가 코드:
class NewsItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
publish_time = scrapy.Field()
Spider 를 작성 하 다
창설 iteyespider. py 파일
기어 오 르 기 명령 을 집행 하 다.
프로젝트 디 렉 터 리 에서 명령 행 실행
scrapy crawl iteye # iteye spider name
pycharm 콘 솔 에 정 보 를 출력 하기 위해 서 는 main. py 를 쓰 고 이 파일 을 직접 실행 하면 됩 니 다.
from scrapy import cmdline
cmdline.execute('scrapy crawl iteye -o iteye_news.json'.split())
이렇게 캡 처 한 데 이 터 는 모두 iteye 에 기록 되 었 습 니 다.news. json 에서 기본 인 코딩 은 유 니 코드 입 니 다.
mongodb 에 데 이 터 를 저장 합 니 다.
#
ITEM_PIPELINES = {
'myspider.pipelines.MyspiderPipeline': 300,
}
# mogo
mongo_host = '127.0.0.1'
mongo_port = 27017
mongo_db_name = 'iteye'
mongo_db_collection = 'iteye_news'
class MyspiderPipeline(object):
def __init__(self):
#
host = mongo_host
port = mongo_port
dbname = mongo_db_name
sheetname = mongo_db_collection
client = pymongo.MongoClient(host=host,port=port)
mydb = client[dbname]
self.post = mydb[sheetname]
def process_item(self, item, spider):
# mongodb
data = dict(item)
self.post.insert(data)
return item
mongo 기본 설치 설정 만 있 으 면 됩 니 다.
db.getCollection('iteye_news').find({})
에이전트 중간 부품 의 작성
파충류 프로그램의 신분 을 숨 기기 위해 파충류 프로그램의 ip 이 사이트 에서 직접 사용 되 지 않도록 ip 대리 와 랜 덤 user 에이전트 두 가지 방식 을 사용 할 수 있 습 니 다.
ip 에이전트 미들웨어
middlewares. py 수정
# ip
class my_proxy(object):
def process_request(self,request,spider):
# ip
request.meta['proxy'] = ''
#
proxy_name_pwd = b''
#
encode_name_pwd = base64.b64encode(proxy_name_pwd)
#
request.headers['Proxy-Authorization'] = 'Basic' + encode_name_pwd.decode()
user 에이전트 에이전트 중간 부품
Python 에서 User Agent 를 설정 하지 않 으 면 프로그램 이 기본 인 자 를 사용 합 니 다. 이 User Agent 에는 Python 이라는 글자 가 있 습 니 다. 서버 에서 User Agent 를 검사 하면 User Agent 를 설정 하지 않 은 Python 프로그램 이 웹 사 이 트 를 정상적으로 방문 할 수 없습니다.
middlewares. py 수정
# user agent
class my_user_agent(object):
def process_request(self,request,spider):
USER_AGENT_LIST=[
'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23',
'Opera/9.20 (Macintosh; Intel Mac OS X; U; en)',
'Opera/9.0 (Macintosh; PPC Mac OS X; U; en)',
'iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)',
'Mozilla/4.76 [en_jp] (X11; U; SunOS 5.8 sun4u)',
'iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0',
'Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)',
'Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)'
]
self.choice = random.choice(USER_AGENT_LIST)
agent = random.choice(USER_AGENT_LIST)
request.headers['User-Agent'] = agent
미들웨어 설정 열기
setting. py 수정
# ,543 ,
DOWNLOADER_MIDDLEWARES = {
'myspider.middlewares.my_user_agent': 543,
'myspider.middlewares.my_proxy': 544,
}
참고 자료
python 기본 튜 토리 얼:http://www.runoob.com/python/python-tutorial.html
Scrapy 입문 강좌:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.