기술나눔

Python 크롤러 요청 모듈

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

전희:
1. 한밤중에 잠을 못 이루게 만드는 사진을 보고 싶지만 자원이 없나요?
2. 여행 성수기인 연휴 기간에 기차표를 빨리 구매하고 싶으신가요?
3. 온라인 쇼핑 시 최고의 평판과 품질을 자랑하는 제품을 빠르고 정확하게 찾고 싶으신가요?

크롤러란 무엇입니까?
- 프로그램을 작성하여 브라우저가 인터넷을 서핑하고 인터넷에서 데이터를 크롤링하는 과정을 시뮬레이션합니다.

크롤러의 가치:

-실용적인 적용

-고용

크롤러는 합법인가요, 불법인가요?

법으로 금지되어 있지는 않습니다

법률 위반 위험

좋은 파충류 악성 파충류

크롤러로 인해 발생하는 위험은 다음 두 가지 측면에서 반영될 수 있습니다.
- 크롤러는 방문한 웹사이트의 정상적인 작동을 방해합니다.
- 크롤러는 법으로 보호되는 특정 유형의 데이터 또는 정보를 캡처합니다.

크롤러를 사용할 때 문제가 발생하는 불운을 피하는 방법은 무엇입니까?

- 방문한 웹사이트의 정상적인 작동을 방해하지 않도록 자신의 프로그램을 자주 최적화하십시오.

- 크롤링된 데이터를 사용 및 유포할 때 크롤링된 콘텐츠를 검토하고, 사용자와 관련된 영업 비밀 등 민감한 콘텐츠가 발견되면 적시에 크롤링 또는 유포를 중지해야 합니다.

사용 시나리오에서 크롤러 분류
-범용 크롤러:
크롤링 시스템의 중요한 부분입니다. 캡처되는 것은 전체 데이터 페이지입니다.
- 크롤러에 중점을 둡니다.
Universal Crawler를 기반으로 제작되었습니다. 캡처되는 내용은 페이지의 특정 부분 콘텐츠입니다.

-증분 크롤러:
웹사이트에서 데이터 업데이트를 감지합니다. 웹사이트에서 최신 업데이트된 데이터만 크롤링됩니다.


파충류 창과 방패
등반 방지 메커니즘
포털 웹사이트는 해당 전략이나 기술적 수단을 마련하여 크롤러가 웹사이트 데이터를 크롤링하는 것을 방지할 수 있습니다.
등반 반대 전략
크롤러 프로그램은 관련 전략이나 기술적 수단을 마련하여 포털 웹사이트의 크롤링 방지 메커니즘을 깨뜨려 포털 정보를 얻을 수 있습니다.


robots.txt 프로토콜: +/robots.txt는 모든 웹사이트에서 볼 수 있습니다.
신사의 동의. 이는 웹사이트에서 크롤러가 크롤링할 수 있는 데이터와 크롤링할 수 없는 데이터를 규정합니다.

http 프로토콜

- 개념 : 서버와 클라이언트 간의 데이터 상호작용 형태이다.

공통 요청 헤더 정보: 요청 캐리어의 ID

- User-Agent:Connection : 요청 완료 후 연결을 끊을지, 유지할지 여부
일반적인 응답 헤더 정보
-Content-Type: 서버가 클라이언트에 응답하는 데이터 유형


https 프로토콜:- 보안 하이퍼텍스트 전송 프로토콜(보안)
암호화
대칭 키 암호화
비대칭 키 암호화
인증서 키 암호화

텍스트

  1. import requests
  2. # 检查当前脚本是否作为主程序运行
  3. if __name__ == "__main__":
  4. # 定义 KFC 官方网站获取门店列表信息的 URL
  5. url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
  6. # 定义 HTTP 请求的头部信息,模拟浏览器请求
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
  9. }
  10. # 提示用户输入一个位置信息,作为搜索门店的关键词
  11. keyword = input('enter location:') # 例如 "北京"
  12. # 循环请求第1页到第9页的数据
  13. for page in range(1,10):
  14. # 定义发送请求时所需的参数
  15. params = {
  16. 'op': 'keyword', # 操作类型为关键词搜索
  17. 'cname': '', # 城市名称(此处为空)
  18. 'pid': '', # 其他参数(此处为空)
  19. 'keyword': keyword, # 用户输入的关键词
  20. 'pageIndex': page, # 当前请求的页面索引
  21. 'pageSize': 1000, # 每页显示的门店数量
  22. }
  23. # 尝试发送请求并处理响应
  24. try:
  25. # 发送 GET 请求,请求参数包括 URL、参数和头部信息
  26. response = requests.get(url=url, params=params, headers=headers)
  27. # 检查响应状态码,如果不是 200,将引发 HTTPError 异常
  28. response.raise_for_status()
  29. # 获取响应内容
  30. page_text = response.text
  31. # 构建文件名,包括关键词、页码和 .html 扩展名
  32. filename = f'{keyword}_page_{page}.html'
  33. # 打开一个文件,以写入模式打开,并指定编码为 utf-8
  34. with open(filename, 'w', encoding='utf-8') as fp:
  35. # 将响应内容写入到文件中
  36. fp.write(page_text)
  37. # 打印一条消息,表明文件已经成功保存
  38. print(f'{filename} 保存成功!!!')
  39. # 捕获由 requests 库抛出的任何异常
  40. except requests.RequestException as e:
  41. # 打印异常信息
  42. print(f'请求错误: {e}')