비밀리에 파이썬을 배우고 모두에게 충격을주고 싶다 (8 일차)

여기에 사진 설명 삽입

제목이 불쾌감을주는 것은 아니지만이 광고가 재미 있다고 생각합니다
. 마음에 들면 위의 마인드 맵을 가져 가세요. 어차피 많이 배울 수는 없습니다.

머리말

초기 검토 : Python을 비밀리에 배우고 싶습니다 (7 일차)

이전 기사에서 처음으로 크롤러를 보았습니다. 사실 밀접한 접촉 후에는 배울 수 없다는 사실을 발견했습니다. 작은 사진 만 크롤링했지만 웹 페이지를 크롤링하는 것은 여전히 ​​더 어렵습니다. 다음 사용 사례는 너무 강력하여 다른 사람의 소스 코드를 제거 할 수 없습니다. 위로 올라간다.

그러면 우리는 무엇을해야합니까? 다른 사람의 크롤러의 영향을 살펴보면 그렇게 지저분한 소스 코드는없는 것 같습니다. 웹 페이지 분석이 필요합니다. 오늘은 웹 페이지를 분석하여 유효한 단어를 추출해 보겠습니다.

주의, 우리는 당신에게 프론트 엔드를 수행하도록 가르 칠 수는 없지만 단순히 우리의 크롤러를 찾기 위해 웹 페이지의 구조를 이해합니다.

푸시 삽입 : (Xiaobai 인 경우 다음 단락을 볼 수 있습니다.)

우리 서클에 오신 것을 환영합니다

저는 Python Q & A 그룹을 만들었습니다. 관심있는 친구들은 다음을 확인할 수 있습니다. 어떤 종류의 그룹입니까?

그룹에 이미 200 명 이상의 친구가 있습니다! ! !

그룹을 통한 포털 : 포털


本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?

我要的不多,点个关注就好啦
然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。

本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。

HTML 기본

HTML이란 무엇입니까?

HTML (Hyper Text Markup Language)은 웹 페이지를 설명하는 데 사용되는 언어로 하이퍼 텍스트 마크 업 언어라고도합니다.
여기에서 그것이 더 이상 중요하지 않습니다. 집중합시다. 여기에있는 모든 사람들이 낯선 언어를 거부해서는 안됩니다. 이것은 주요 전제입니다.

페이지의 HTML 코드보기

예를 들어 7 일째되는 날 웹 페이지를 가볍게 열어 보자 : https://blog.csdn.net/qq_43762191/article/details/109320746

웹 페이지의 빈 영역을 마우스 오른쪽 버튼으로 클릭하면 웹 페이지의 소스 코드가 표시됩니다.
코드가 너무 길면 복사하지 않겠습니다. 이제 URL은 다음과 같습니다. view-source : https://blog.csdn.net/qq_43762191/article/details/109320746
소스 코드를 찾을 수없는 경우 URL에서 직접 입력 할 수 있습니다. .

또 다른 방법이 있습니다 : 오른쪽 클릭-> 확인,이 방법은 소스 코드와 웹 페이지가 같은 화면에 나타나도록 할 수 있습니다.
개인 취향에 따라 다르며 각각 고유 한 장점이 있습니다.


우리는 무엇을 보았습니까?

라벨 및 요소

먼저 HTML 문서를 살펴 보겠습니다. 꺾쇠 괄호 <> 사이에 많은 글자가 끼어있는 것을 볼 수 있는데 [태그]라고합니다.

태그는 일반적으로 쌍으로 표시됩니다. 앞면은 [시작 태그], 뒷면은 [종료 태그] 등입니다.

그러나 HTML 코드의 다섯 번째 줄 (웹 페이지의 인코딩 형식을 utf-8로 정의)과 같이 단독으로 나타나는 태그도 있습니다. 이를 알고있는 한 대부분의 경우 쌍으로 표시되는 레이블이 사용됩니다.

여기에 사진 설명 삽입
사실, 시작 태그 + 종료 태그 + 그 사이의 모든 것이 함께 [요소]를 형성합니다.

다음 표에는 몇 가지 공통 요소가 나열되어 있습니다.
여기에 사진 설명 삽입

이제 돌아가서 웹 페이지의 소스 코드를 살펴보십시오.이 양식 없이도 똑같이 추측 할 수 있습니다.
훨씬 더 명확합니까! ! !

HTML 기본 구조

충분하지 않다고 생각되면 다른 하나를 가져 오세요.
여기에 사진 설명 삽입

HTML 속성

또한 본문 다음에 "class"가 반복적으로 나타나는 것을 발견 할 수 있습니다. "attributes"라고합니다. 살펴 보겠습니다.

여기에 사진 설명 삽입

지금까지 HTML 구성을 완료했습니다 : 태그, 요소, 구조 (헤더 및 본문), 속성.
자, 이제 부담감을 느끼지 않을 때까지 직관적으로 웹 페이지의 소스 코드를 살펴 보겠습니다.


웹 페이지 텍스트 크롤링

리뷰

전날 웹 페이지의 소스 코드 만 크롤링 할 수 있다는 점에 아쉬움을 남겼지 만 실제로는 첫 번째 단계였습니다. 다음으로 웹 페이지 코드를 파싱하고 원하는 콘텐츠를 추출했습니다.

당시 코드는 다음과 같습니다.

import requests #调用requests库
res = requests.get('https://blog.csdn.net/qq_43762191')	#爬我自己的主页
#获取网页源代码,得到的res是Response对象
html=res.text
#把res的内容以字符串的形式返回
print('响应状态码:',res.status_code) #检查请求是否正确响应
print(html) #打印网页源代码

BeautifulSoup

여기에 좋은 이름, 아름다운 영혼을 가진 BeautifulSoup 모듈이 있습니다.

pycharm에서 다운로드 할 수 없습니다. Python3.9를 사용하기 때문인지 아니면 이전에 워드 클라우드에서했던 것처럼 별도로 다운로드 할 수 없는지 모르겠습니다. 하지만 어쨌든 beautifulsoup4를 다운로드 할 수 있습니다. 무엇을 다운로드하든 상관없이 다운로드 후 bs4 패키지를 찾을 수 있는지 확인하십시오.

웹 페이지 데이터 분석

res = BeautifulSoup ( '파싱 할 데이터', '파서')

매개 변수 정의 : 첫
번째는 구문 분석 할 텍스트입니다. 문자열이어야합니다.

두 번째 매개 변수는 파서를 식별하는 데 사용되며 Python 내장 라이브러리 인 html.parser를 사용합니다. (유일한 파서가 아니지만 비교적 간단합니다)

그럼 다음을 살펴 보겠습니다.

import requests
from bs4 import BeautifulSoup
res = requests.get('https://blog.csdn.net/qq_43762191') 
soup = BeautifulSoup( res.text,'html.parser')
print(type(soup)) #查看soup的类型
wt = open('test4.txt','w',encoding='utf-8')
wt.write(res.text)
wt.close()

좋아, 가서 해봐. CSDN을 사용하면 쉽게 성공할 수 없다는 사실을 알게 될 것입니다. 여전히 크롤링되어 있지만 이는 훌륭합니다.
웹 사이트를 변경합시다.
https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247489783&idx=1&sn=09d76423b700620f80c9da9e4d8a8536&chksm=ebf6c088dc81499e3d5a0feeb67fec27499e3d5a0feeb67fec27499e3d5a0feeb67fec27499e3d5a0feeb67fec21499e3d5a0feeb67fec27499e3d5a0feeb67f

이 기사는 볼거리가 있지만 아래로 내려 가서 직접 봤는데, 읽은 후 오후 내내 공부도 했어요 물론 안전을 위해서 였어요 네, 좋은 사람이에요.

실행 결과를 보면 수프의 데이터 유형은 <class'bs4.BeautifulSoup '>이며 수프가 BeautifulSoup 객체임을 나타냅니다.


데이터 추출

이 단계는 find () 및 find_all () 및 Tag 객체의 두 부분으로 나눌 수 있습니다.

여기에 사진 설명 삽입

import requests
from bs4 import BeautifulSoup
res = requests.get('https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247489783&idx=1&sn=09d76423b700620f80c9da9e4d8a8536&chksm=ebf6c088dc81499e3d5a0febeb67fec27ba52f233b6a0e6fda37221a2c497dee82f2de29e567&scene=21#wechat_redirect') #好像只能爬取以.html结尾的网址,连我的博客主页都没办法爬
soup = BeautifulSoup( res.text,'html.parser')
item = soup.find('div')
#item = soup.find_all('div')
print(type(item)) #查看soup的类型
wt = open('test6.txt','w',encoding='utf-8')
wt.write(str(item))
wt.close()
print(item)

사실은 그 논문이 너무 피상적이라는 것을 증명했고, 나는 이것을해야한다는 것을 알고 있으며, 나는 위 그림의 말도 안되는 것을 거의 믿었습니다.

(사실 뒤돌아보고 꼼꼼히 공부하면 새로운 발견이있을 것입니다)

괄호 안의 매개 변수 : 태그와 속성은 웹 페이지에서 추출하려는 항목에 따라 둘 중 하나이거나 함께 사용할 수 있습니다.

정확한 위치 지정을 위해 하나의 매개 변수 만 사용할 수있는 경우 검색에 하나의 매개 변수 만 사용됩니다. 찾고있는 콘텐츠를 정확하게 찾기 위해 라벨과 속성을 동시에 충족해야하는 경우 두 매개 변수를 함께 사용하세요.


태그 개체

승리가 눈앞에 있다고 생각하고 사형 집행 후 그 광경에 아무런 문제가 없다는 것이 밝혀졌습니다. 걱정하지 마십시오. 계속해서 아래를 내려다 보자. 우리는 손실을 볼 수 없습니다.

우리는 하루의 대부분을 바빴고 많은 소스 코드를 생각해 냈습니다. Tony가 물을 가져 왔지만 정말 변화가 없습니까? 눈을 믿지 마십시오. 눈이 때때로 속일 수 있습니다. 반환 값이 반환 될 때마다 속성을 인쇄 할 수 있습니다. 실제로 속성은 항상 우리에게 유익한 방향으로 발전하고 있습니다.

데이터 유형이 Tag 객체 인 <class'bs4.element.Tag '>임을 알 수 있습니다.

앞서 말한 것을 기억하십니까? 추출 된 데이터는 무엇과 태그로 나뉩니다. 이제 마지막 스프린트를 할 시간입니다. 맞아요, 서두르세요! ! !
여기에 사진 설명 삽입

여기에 사진 설명 삽입

먼저, Tag 객체는 find () 및 find_all ()을 사용하여 검색 할 수 있습니다.

res = requests.get('https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247489783&idx=1&sn=09d76423b700620f80c9da9e4d8a8536&chksm=ebf6c088dc81499e3d5a0febeb67fec27ba52f233b6a0e6fda37221a2c497dee82f2de29e567&scene=21')#wechat_redirect') #好像只能爬取以.html结尾的网址,连我的博客主页都没办法爬')
# 返回一个response对象,赋值给res
html = res.text
# 把res的内容以字符串的形式返回
soup = BeautifulSoup( html,'html.parser')
# 把网页解析为BeautifulSoup对象
items = soup.find_all('div') # 通过定位标签和属性提取我们想要的数据
for item in items:
    kind = item.find(class_='rich_media_area_primary') # 在列表中的每个元素里,匹配标签<h2>提取出数据
    print(kind,'\n') # 打印提取出的数据
    print(type(kind)) # 打印提取出的数据类型

Tag.text를 사용하여 Tag 객체의 텍스트를 제안하고 Tag [ 'href']를 사용하여 URL을 추출합니다.

import requests # 调用requests库
from bs4 import BeautifulSoup # 调用BeautifulSoup库
res =requests.get('https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&mid=2247489783&idx=1&sn=09d76423b700620f80c9da9e4d8a8536&chksm=ebf6c088dc81499e3d5a0febeb67fec27ba52f233b6a0e6fda37221a2c497dee82f2de29e567&scene=21#wechat_redirect')
# 返回一个response对象,赋值给res
html=res.text
# 把res解析为字符串
soup = BeautifulSoup( html,'html.parser')
# 把网页解析为BeautifulSoup对象
items = soup.find_all(class_='rich_media')   # 通过匹配属性class='rich_media'提取出我们想要的元素
for item in items:                      # 遍历列表items
    kind = item.find('h2')               # 在列表中的每个元素里,匹配标签<h2>提取出数据
    title = item.find(class_='profile_container')     #  在列表中的每个元素里,匹配属性class_='profile_container'提取出数据
    print(kind.text,'\n',title.text) # 打印书籍的类型、名字、链接和简介的文字

리뷰

사실 처음부터 데이터를 얻기 위해 요청 라이브러리를 사용하고, 데이터를 구문 분석하기 위해 BeautifulSoup 라이브러리를 사용하고, 데이터를 추출하기 위해 BeautifulSoup 라이브러리를 계속 사용하기 시작했을 때, 우리가 끊임없이 경험하는 것은 운영 객체의 유형 변환입니다.

아래 그림을 참조하십시오 :

여기에 사진 설명 삽입

추천

출처blog.csdn.net/qq_43762191/article/details/109399104