python 화 웨 이 응용 시장 평론
전체 항목 을 github 에 놓 았 습 니 다.python 3.7 에서 정상적으로 사용 할 수 있 습 니 다.문제 가 있 으 면 지적 해 주 십시오.
github 프로젝트 주소:https://github.com/LSY-C/scrapy_hauweiappstore_comment
각각 응용 정보 와 응용 평론 정 보 를 얻 었 는데 데이터 구 조 는 다음 과 같다.
1.Scrapy 프로젝트 설치 및 생 성
Scrapy 공식 문서:https://docs.scrapy.org/en/latest/intro/install.html
Scrapy 는 비교적 사용 하기 좋 은 python 파충류 프레임 워 크 로 공식 문서 도 비교적 상세 하 게 썼 다.다음 명령 을 직접 실행 하여 설치 할 수 있 습 니 다:
pip install Scrapy
설치 가 완료 되면 Scrapy 프로젝트 를 만들어 야 합 니 다.파충류 프로젝트 프레임 워 크 에 해당 합 니 다.프로젝트 를 설치 하고 싶 은 곳 에서 명령 행 을 열 고 다음 명령 을 입력 하면[procjectname]폴 더,예 를 들 어 내[procjectname]은 appstore 입 니 다.폴 더 에 자동 으로 생 성 되 는 파일 입 니 다.
scrapy startproject appstore
웹 페이지 정 보 를 얻 는 데 자주 사용 하 는 방법 은 두 가지 가 있다.
1.스 크 래 피 파충류 운행 절차
먼저 Scrapy 의 파충류 가 어떻게 작 동 하 는 지 대체적으로 알 아야 한다.다음 과 같은 몇 가지 절차 로 나 뉜 다.
import scrapy
class HuaWei(scrapy.Spider):
name = "huawei"
allowed_domains = ['appstore.huawei.com', 'web-drcn.hispace.dbankcloud.cn']
start_urls = [
'https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.getTemplate&serviceType=20&zone=&locale=zh']
def parse(self, response):
pass
scrapy crawl hauwei
2.페이지 분석먼저,브 라 우 저 를 통 해 응용 시장 을 방문 하여 웹 페이지 의 기본 정 보 를 분석 하고 자 합 니 다.여기 서 저 는 응용 시장 에서 모든 응용 평론 을 얻 고 싶 습 니 다.그래서 먼저 모든 응용 프로그램의 상세 한 인터페이스 에 들 어간 다음 에 상세 한 인터페이스 에서 평론 을 펼 쳐 서 얻 어야 합 니 다.기본 적 인 사 고 는 모든 분류 C>모든 하위 분류 C>모든 응용 C 를 펼 치고 모든 댓 글 을 가 져 오 는 것 입 니 다.
기어 오 르 는 초기 페이지 는https://appgallery.huawei.com/#/Apps입 니 다.브 라 우 저 에서 F12 를 사용 하여 개발 자 모드 를 시작 하고 웹 페이지 전단 코드 를 디 버 깅 합 니 다.우 리 는 페이지 레이아웃 의 일부 규칙 을 찾 을 수 있 기 를 바 랍 니 다.
페이지 분석 프로 세 스 1
우 리 는 분 류 를 응용 하 는 옵션 에서 어떤 분류 나 하위 분 류 를 선택 하 더 라 도 url 은 변 하지 않 는 다 는 것 을 발견 했다.즉,분 류 를 선택 한 후에 해당 하 는 응용 목록 을 표시 하 는 기능 은 동태 적 으로 이 루어 진 것 이다.우 리 는 html 의 정 보 를 캡 처 하여 서로 다른 분류의 응용 목록 을 얻 을 수 없다.그러면 우 리 는 자신의 구조 요청 을 통 해 json 데 이 터 를 얻 는 방식 으로 정 보 를 얻 을 수 밖 에 없다.
우선,디 버 깅 창 에 있 는 Network 옵션 을 열 어 서로 다른 분류 응용 목록 을 가 져 올 때의 네트워크 패 킷 을 분석 합 니 다.
첫 번 째 패 킷 을 제외 하고 뒤에 있 는 것 은 모두 응용 아이콘 데 이 터 를 가 져 오 는 것 입 니 다.즉,첫 번 째 패 킷 에는 응용 되 는 다른 데이터 가 포함 되 어 있 습 니 다.이 패 킷 의 request 를 보십시오.url:
https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.getTabDetail
&serviceType=20
&reqPageNum=1
&uri=8e62cf6d238c4abdb892b400ff072f43
&maxResults=25
&zone=
&locale=zh
저 희 는 브 라 우 저 에서 이 url 을 직접 방문 하면 json 파일 을 얻 을 수 있 습 니 다.분석 한 결과 이 json 파일 에는 목록 에 응 용 된 정보 가 포함 되 어 있 습 니 다.서로 다른 분류,하위 분 류 를 클릭 하여 서로 다른 request 획득url,우 리 는 모든 하위 분류의 request 를 발견 했다.url 은 uri 필드 만 다 르 고 기본 적 인 상황 은 1 페이지 의 25 개의 응용 만 표시 합 니 다.그 러 니까 우리 가 이 걸 로 requesturl 은 템 플 릿 입 니 다.uri 필드 를 수정 하여 다양한 종류의 응용 목록 을 가 져 오고 reqPageNum 필드 를 수정 하여 목록 의 여러 페이지 를 가 져 옵 니 다.페이지 분석 과정 2
수 동 으로 모든 응용 프로그램의 상세 한 인터페이스 에 들 어 갈 때 우 리 는 서로 다른 응용 상세 한 인터페이스의 url 은 마지막 위치 만 다르다 는 것 을 발견 했다.예 를 들 어 텐 센트 영상 과 유쿠 영상 이라는 두 응용 상세 한 인터페이스의 url 은 각각 다음 과 같다.
몇 개의 응용 프로그램 을 더 살 펴 보면 마지막 코드 는 유일한 식별 자 를 응용 하 는 것 과 유사 한 것 임 을 알 수 있다.이전 단계 에서 우 리 는 얻 은 모든 응용 정보 에 이러한 식별 자('appid'키 의 값)를 찾 을 수 있 음 을 발견 할 수 있 습 니 다.그래서 저 는 여기 서 직접 이런 형식 으로 url 을 구성 하여 페이지 를 가 져 오 라 고 요 청 했 지만 실 패 했 습 니 다.페이지 의 방향 을 바 꾸 는 문제 일 수도 있 습 니 다.어 쩔 수 없 이 순서대로 다른 방식 으로 계속 분석 할 수 밖 에 없 었 습 니 다.
F12 를 통 해 페이지 레이아웃 을 볼 수 있 습 니 다.모든 app 카드 에는 app 이름과 다른 정보 가 있 지만 app 상세 페이지 의 링크 를 찾 을 수 없습니다.상세 한 정 보 를 얻 는 기능 은 js 동적 으로 얻 은 것 으로 기록 되 어 있 기 때문에 html 인터페이스 에서 직접 얻 을 수 없 기 때문에 구조 request 를 사용 합 니 다.url 방법 으로 json 데 이 터 를 가 져 옵 니 다.
분석 과정 과 유사 하여 우 리 는 아래 의 request 를 얻 을 수 있 습 니 다.url:
https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.getTabDetail
&serviceType=20
&reqPageNum=1
&maxResults=25
&uri=app%7CC174391
&shareTo=
¤tUrl=https%253A%252F%252Fappgallery.huawei.com%252F%2523%252Fapp%252FC174391
&accessId=
&appid=C174391
&zone=
&locale=zh
이 requesturl 에서 얻 은 json 에는 응용 에 대한 상세 한 정보 가 포함 되 어 있 습 니 다.실제 테스트 를 통 해 reqPageNum,max Results,shareto,currentUrl,accessId,appid,zone,locale 필드 는 모두 필요 하지 않 습 니 다.그리고 uri 필드 뒤의"C174391"은 현재 응용 되 고 있 는 appid 입 니 다.즉,uri 필드 의'app%7C'뒤의 문자열 을 서로 다른 응용 프로그램 인 appid(분석 과정 1 의 json 파일 에서 얻 을 수 있 음)로 수정 하면 서로 다른 응용 프로그램의 상세 한 정 보 를 얻 을 수 있 습 니 다.페이지 분석 과정 3
위 에서 두 번 분석 한 경험 이 있 습 니 다.우 리 는 모든 응용 프로그램의 평론 데 이 터 를 계속 얻 었 습 니 다.이런 데이터 도 js 동 태 를 통 해 얻 은 것 을 발견 하고 request 를 계속 분석 합 니 다.url,형식 은 다음 과 같 습 니 다:
https://web-drcn.hispace.dbankcloud.cn/uowap/index
?method=internal.user.commenList3
&serviceType=20
&reqPageNum=1
&maxResults=25
&appid=C2002
&version=10.0.0
&zone=
&locale=zh
이전 과 마찬가지 로 우 리 는 appid 필드 를 수정 하여 서로 다른 응용 프로그램의 댓 글 을 얻 을 수 있 고 reqPageNum 필드 를 수정 하여 여러 페이지 의 댓 글 을 얻 을 수 있 습 니 다.3.파충류 실현
전체 기어 오 르 는 과정 은:구조 requesturl 요청 json 데이터 가 져 오기 C>json 데이터 분석 C>새로운 requesturl json 데이터 가 져 오기 C>...
다음은 파충류 의 처리 함수 입 니 다.모든 응용 프로그램의 상세 한 정 보 를 처리 하고 댓 글 을 얻 는 request 를 구성 하 는 기능 입 니 다.url 에서 새로운 요청 을 보 내 고 그 중의 관건 적 인 부분 을 차례대로 설명 합 니 다.
def app_parse(self, response):
"""
, 、 、 、 、 , appcomment_parse
:param resonse:
:return:
"""
appid = response.meta['appid']
app_json = json.loads(response.text)
Name = app_json.get('layoutData')[0].get('dataList')[0].get('name')
Star = app_json.get('layoutData')[0].get('dataList')[0].get('intro')
Downloads = app_json.get('layoutData')[0].get('dataList')[0].get('stars')
Price = app_json.get('layoutData')[3].get('dataList')[0].get('tariffDesc')
Version = app_json.get('layoutData')[3].get('dataList')[0].get('version')
Developer = app_json.get('layoutData')[3].get('dataList')[0].get('developer')
Description = app_json.get('layoutData')[7].get('dataList')[0].get('appIntro').replace('
', '')
AppData = AppItem(
AppId=appid,
AppName=Name,
AppDesc=Description,
AppPrice=Price,
AppVersion=Version,
AppDeveloper=Developer,
AppStar=Star,
AppDownloads=Downloads
)
yield AppData
for pagenum in range(1, 20):
request_url = "https://web-drcn.hispace.dbankcloud.cn/uowap/index?method=internal.user.commenList3&serviceType=20&reqPageNum={}&maxResults=25&appid={}&version=10.0.0&zone=&locale=zh".format(
pagenum, appid)
yield scrapy.Request(url=request_url, callback=self.appcomment_parse, meta={'appid': appid})
json 분석 및 구조 요청여덟 번 째 줄 에 서 는 json.loads 를 통 해 응답 을 json 형식 으로 해석 하고 나중에 키 값 과 index 를 사용 하여 정 보 를 방문 합 니 다.
items 에 데이터 저장
items.py 파일 에서 Item 류 를 정의 한 후 이 곳 에서 Item 대상 을 새로 만 들 고 해당 하 는 값 을 입력 하여 이 item 을 pipeline.py 에 되 돌려 처리 할 수 있 습 니 다.
# items.py
class AppItem(scrapy.Item):
AppId = scrapy.Field()
AppName = scrapy.Field()
AppDesc = scrapy.Field()
AppPrice = scrapy.Field()
AppVersion = scrapy.Field()
AppDeveloper = scrapy.Field()
AppStar = scrapy.Field()
AppDownloads = scrapy.Field()
yield 는 python 의 키워드 입 니 다.return 과 유사 합 니 다.함 수 는 이 키워드 가 수식 하 는 표현 식 값 을 되 돌려 줍 니 다.return 과 달리 yield 는 한 값 을 되 돌려 준 후에 뒤의 코드 를 계속 실행 합 니 다.return 은 그렇지 않 습 니 다.새로운 요청 을 구성 하 다
마지막 줄 에서 모든 댓 글 목록 에 대한 새로운 requesturl 은 댓 글 정 보 를 얻 고 scrapy.Request 를 통 해 요청 을 보 냅 니 다.이 요청 응답 을 처리 할 처리 함 수 를 지정 합 니 다.meta 에는 callback 함수 에 전달 하고 자 하 는 정보 가 포함 되 어 있 습 니 다.
item 데이터 처리
데 이 터 를 추출 하 는 과정 에서 처리 함 수 는 실시 간 으로 서로 다른 item 을 되 돌려 주 고 pipeline 에 맡 겨 처리 합 니 다.이 때 는 pipeline.py 에서 이 item 을 어떻게 처리 하 는 지 지정 해 야 합 니 다.예 를 들 어 제 가 데 이 터 를 모두 csv 표 에 기록 해 야 합 니 다.pipeline 클래스 에서 process 를 정의 해 야 합 니 다.item 함수 가 모든 item 을 처리 하고init__closespider 는 모두 선택 할 수 있 습 니 다.
class AppStorePipeline:
def __init__(self):
self.app_list = []
self.comment_list = []
def process_item(self, item, spider): # item
if isinstance(item, AppItem):
self.app_list.append(dict(item))
elif isinstance(item, CommentItem):
self.comment_list.append(dict(item))
return item
def close_spider(self, spider): #
df_app = pd.DataFrame(self.app_list)
df_comment = pd.DataFrame(self.comment_list)
df_app.to_csv('app_info.csv')
df_comment.to_csv('comment_info.csv')
이상 은 python 이 화 웨 이 응용 시장 평론 을 얻 는 상세 한 내용 입 니 다.더 많은 python 이 화 웨 이 응용 시장 을 얻 는 것 에 관 한 자 료 는 우리 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.