Python 파충류 가 뉴스 정보 획득 사례 상세 설명

머리말
본 논문 의 문자 와 사진 은 인터넷 에서 기원 되 고 학습,교류 에 만 사용 할 수 있 으 며 어떠한 상업 적 용도 도 가지 지 않 습 니 다.저작권 은 원작 자의 소유 입 니 다.문제 가 있 으 면 저희 에 게 연락 하여 처리 하 십시오.
간단 한 Python 정보 수집 사례,목록 페이지 에서 상세 한 페이지,데이터 저장,txt 문서 로 저장,사이트 홈 페이지 구조 가 비교적 정연 하고 간단명료 하 며 정보 뉴스 내용 의 수집 과 저장!

적 용 된 라 이브 러 리
requests,time,re,UserAgent,etree
import requests,time,re
from fake_useragent import UserAgent
from lxml import etree
목록 페이지

목록 페이지,링크 xpath 분석href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')상세 페이지


내용 xpath 해석
h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]
author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]
details=req.xpath('//div[@class="content-l detail"]/p/text()')
내용 포맷 처리detail='
'.join(details)
제목 포맷 처리,불법 문자 교체
pattern = r"[\/\\\:\*\?\"\<\>\|]"
new_title = re.sub(pattern, "_", title)\#밑줄 로 바 꾸 기
데이터 저장,txt 텍스트 로 저장
def save(self,h2, author, detail):
with open(f'{h2}.txt','w',encoding='utf-8') as f:
f.write('%s%s%s%s%s'%(h2,'',detail,'',author))
print(f"{h2}.txt 텍스트 저장 성공!")
데이터 수집,yield 처리
def get_tasks(self):
data_list = self.parse_home_list(self.url)
for item in data_list:
yield item
프로그램 실행 효과

프로그램 채집 효과

소스 코드 참조:

# -*- coding: UTF-8 -*-

import requests,time,re
from fake_useragent import UserAgent
from lxml import etree

class RandomHeaders(object):
  ua=UserAgent()
  @property
  def random_headers(self):
    return {
      'User-Agent': self.ua.random,
    }

class Spider(RandomHeaders):
  def __init__(self,url):
    self.url=url


  def parse_home_list(self,url):
    response=requests.get(url,headers=self.random_headers).content.decode('utf-8')
    req=etree.HTML(response)
    href_list=req.xpath('//ul[@class="news-list"]/li/a/@href')
    print(href_list)
    for href in href_list:
      item = self.parse_detail(f'https://yz.chsi.com.cn{href}')
      yield item


  def parse_detail(self,url):
    print(f">>    {url}")
    try:
      response = requests.get(url, headers=self.random_headers).content.decode('utf-8')
      time.sleep(2)
    except Exception as e:
      print(e.args)
      self.parse_detail(url)
    else:
      req = etree.HTML(response)
      try:
        h2=req.xpath('//div[@class="title-box"]/h2/text()')[0]
        h2=self.validate_title(h2)
        author=req.xpath('//div[@class="title-box"]/span[@class="news-from"]/text()')[0]
        details=req.xpath('//div[@class="content-l detail"]/p/text()')
        detail='
'.join(details) print(h2, author, detail) self.save(h2, author, detail) return h2, author, detail except IndexError: print(">>> ,5s ..") time.sleep(5) self.parse_detail(url) @staticmethod def validate_title(title): pattern = r"[\/\\\:\*\?\"\<\>\|]" new_title = re.sub(pattern, "_", title) # return new_title def save(self,h2, author, detail): with open(f'{h2}.txt','w',encoding='utf-8') as f: f.write('%s%s%s%s%s'%(h2,'
',detail,'
',author)) print(f" {h2}.txt !") def get_tasks(self): data_list = self.parse_home_list(self.url) for item in data_list: yield item if __name__=="__main__": url="https://yz.chsi.com.cn/kyzx/jyxd/" spider=Spider(url) for data in spider.get_tasks(): print(data)
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기