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)이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.