python-crawler (직접 사용 가능)

여기에 이미지 설명을 삽입하세요.

크롤러(웹 스크래핑)은 프로그래밍을 통해 인터넷에서 자동으로 정보를 얻는 프로세스를 말합니다. 크롤러의 목적은 일반적으로 데이터 분석, 처리 또는 표시를 위해 웹 페이지에서 데이터를 크롤링하는 것입니다. 다음은 크롤러의 기본 프로세스와 몇 가지 중요한 개념입니다.
크롤러의 기본 프로세스:
목표를 결정하다: 크롤링할 웹사이트나 페이지를 결정합니다.
요청 보내기: 프로그래밍 언어(예: Python)를 사용하여 HTTP 요청을 보내고 웹 페이지 콘텐츠를 얻습니다.
구문 분석 페이지: 획득한 페이지를 구문 분석하여 필요한 정보를 추출합니다.
데이터 저장: 추출된 정보를 로컬 파일, 데이터베이스 또는 기타 데이터 저장 방법에 저장합니다.
정기 갱신: 정기적으로 정보를 얻어야 하는 경우 예약된 크롤러를 설정할 수 있습니다.
크롤러의 몇 가지 중요한 개념:
사용자 에이전트: 크롤러를 식별하는 데 사용되는 요청 헤더의 일부입니다. 일부 웹사이트에서는 User-Agent를 감지하며, 크롤러가 감지되면 접근이 제한될 수 있습니다.

쿠키: 사용자를 식별하기 위해 웹사이트가 사용자에게 로컬로 저장한 데이터입니다. 크롤러에서는 사용자 로그인 상태를 시뮬레이션하기 위해 쿠키가 필요한 경우가 있습니다.

HTTP 요청: 통신에 HTTP 프로토콜을 사용하고 GET 또는 POST 요청을 통해 웹 페이지 콘텐츠를 가져옵니다.

HTML 파싱: 구문 분석 라이브러리(예: BeautifulSoup, lxml 등)를 사용하여 HTML을 구문 분석하고 필요한 정보를 추출합니다.

XPath 및 CSS 선택기: 정보를 더 쉽게 추출할 수 있도록 HTML에서 요소를 찾는 구문입니다.

로봇.txt: 크롤러가 액세스할 수 있는 페이지와 액세스할 수 없는 페이지를 지정하는 표준입니다.

크롤러 방지: 일부 웹사이트는 요청 빈도 제한, 확인 코드, 동적 로딩 등과 같은 크롤러 방지 전략을 채택합니다. 크롤러는 이에 따라 이러한 상황을 처리해야 합니다.

연기: IP가 차단되는 것을 방지하기 위해 프록시 서버를 통해 요청을 보냅니다.

데이터 저장고저장소: 크롤링된 데이터를 로컬 파일이나 데이터베이스에 저장합니다.

크롤러 기술은 데이터 수집, 검색 엔진, 여론 모니터링 및 기타 분야에서 널리 사용되지만 크롤러를 사용할 때는 법률, 규정 및 웹 사이트 사용 규정을 준수해야 하며 개인 정보 보호 및 저작권을 존중해야 합니다.

예:

 import os
import urllib.request
from urllib.parse import quote
import re
import urllib.error
import requests
import time

# 设置请求头获取Cookie
get_cookie_headers = {
    
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                                  "Chrome/92.0.4515.159 Safari/537.36 "}
get_cookie_html = "https://www.baidu.com/?tn=49055317_4_hao_pg"
get_cookie_target = requests.session()
cookie_target = get_cookie_target.get(get_cookie_html, headers=get_cookie_headers)
cookie = requests.utils.dict_from_cookiejar(cookie_target.cookies)
print(cookie)

key = []
value = []
result_cookie = ""

# 将Cookie转化为字符串形式
for i in cookie.keys():
    key.append(i)

for i in cookie.values():
    value.append(i)

for i in range(len(key)):
    result_cookie += key[i] + '=' + value[i] + ";"

print(result_cookie)

# 设置请求头
myheaders = {
    
    
    "Cookie": result_cookie,
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/92.0.4515.159 Safari/537.36 "
}

# 输入爬取的主题
pic_dir_name = input("输入想要爬取的主题:****")

# 设置保存路径
base_dir = r"E:\shezu\图/"
pic_dir = base_dir + pic_dir_name

# 创建文件夹
if os.path.exists(base_dir):
    if os.path.exists(pic_dir):
        print(pic_dir + "  文件已存在")
    else:
        os.mkdir(pic_dir)
else:
    os.mkdir(base_dir)
    os.mkdir(pic_dir)

# 对主题进行URL编码
keyword = quote(pic_dir_name, encoding='utf-8')

start_number = 0
base_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&queryWord=" + keyword + "&word=" + keyword + "&pn%d=&rn=60" % start_number

# 正则表达式预编译
key = r'thumbURL":"(.*?)"'
pic_url = re.compile(key)

number = 1

# 爬取图片
while start_number < 1800:
    response = urllib.request.Request(base_url, headers=myheaders)
    result = urllib.request.urlopen(response).read().decode("utf-8")
    for i in re.findall(pic_url, result):
        print(i)
        try:
            response = urllib.request.Request(i, headers=myheaders)
            pic_result = urllib.request.urlopen(response).read()
            with open(pic_dir + "/" + pic_dir_name + str(number) + ".jpg", "wb+") as f:
                f.write(pic_result)
            number += 1
            time.sleep(0.5)
        except urllib.error.URLError:
            print("下载失败")
    start_number += 60

여기에 이미지 설명을 삽입하세요.

이 스크립트의 원칙은 다음과 같습니다.

  1. Baidu 이미지 검색 페이지의 쿠키를 받으세요.
  2. Baidu 이미지 검색 URL을 구성하고 요청 헤더에 쿠키를 설정합니다.
  3. 반환된 JSON 데이터를 구문 분석하고 이미지의 URL을 추출합니다.
  4. 획득한 이미지 URL을 사용하여 지정된 디렉터리에 이미지를 다운로드합니다.

웹사이트 콘텐츠를 크롤링하려면 웹사이트의 관련 규정을 준수하고 이미지 저작권을 존중해야 합니다.

Guess you like

Origin blog.csdn.net/weixin_42367888/article/details/134658899