여러 사이트의 Tech 기사 제목과 URL을 하나의 Excel로 결합
타이틀대로, Tech계 유명 사이트의 신착 기사 타이틀과 그 URL을 1장의 엑셀로 할 수 있는 코드를 썼습니다.
실행 결과↓
타이틀을 한 장의 시트로 확실히 나열 할 수 있다면 좋습니다.
실제 코드
1.WEB_scraping이라는 클래스 안에 4개의 인스턴스 변수를 가지는 인스턴스를 생성(이것이 크롤링하는 사이트)
web_scraping.pyimport requests
from bs4 import BeautifulSoup
import pandas as pd
#タイトル、URL、拾うタグ、classを変数にする
class WEB_scraping:
def __init__(self,name,url,tag,detail):
self.name=name
self.url=url
self.tag=tag
self.detail=detail
#webページのHTMLをかえす
def response(self):
html = requests.get(self.url).text
return BeautifulSoup(html, 'html.parser')
def find(self,html):
return html.find_all(self.tag,class_=self.detail)
response는 self의 HTML을 반환하는 인스턴스 메서드이고 find는 변수 html에서 특정 tag와 클래스를 찾아 반환하는 인스턴스 메서드입니다.
기본 스크립트에서 인스턴스를 정의합니다.
rss_to_excel.pyimport pandas as pd
from web_scraping import WEB_scraping
item1=WEB_scraping("gizmood","https://www.gizmodo.jp/articles/","h3","p-archive-cardTitle")
item2=WEB_scraping("gigazine","http://gigazine.net/","h2",None)
item3=WEB_scraping("TechCrunch","https://jp.techcrunch.com/","h2","post-title")
item4=WEB_scraping("zdnet","https://japan.zdnet.com/archives/","h3",None)
item5=WEB_scraping("hatenaIT","http://b.hatena.ne.jp/hotentry/it","h3","entrylist-contents-title")
items=[item1,item2,item3,item4,item5]
인스턴스 변수의 태그와 세부사항은 Chrome 개발자 도구에서 확인했습니다. gigazine과 ZDnet 기사 제목은 클래스가 지정되지 않았기 때문에 detail은 비어 있습니다.
2. 제목과 URL을 열에 포함하는 Excel 만들기
rss_to_excel.pycolumns=["タイトル","Url"]
excel_writer = pd.ExcelWriter('result.xlsx')
3.item을 반복
rss_to_excel.pyfor item in items:
df=pd.DataFrame(columns=columns)
soup=item.response()
contents=item.find(soup)
제목, URL을 열에 가지는, 하늘의 DataFrame를 만들고 추출하고 싶은 HTML의 태그를 취득합니다. WEB_scraping의 인스턴스 메소드를 두드리고 있습니다.
4.content 기사 제목과 URL을 df에 넣어 간다
rss_to_excel.pyfor content in contents:
title=content.a.string
#gizmoodとzdnetだけhttps~がget(href)で返ってこないから足す
if item.name=="gizmood":
link="https://www.gizmodo.jp"+content.a.get("href")
elif item.name=="zdnet":
link="https://japan.zdnet.com"+content.a.get("href")
else:
link=content.a.get("href")
se=pd.Series([title,link],columns)
print(se)
df=df.append(se,columns)
검색한 콘텐츠에서 하나씩 기사 제목과 URL을 추출하여 정의한 df에 추가합니다.
gizmood와 zdnet은 href로 돌아오는 문자열이 https://를 포함하지 않기 때문에 더합니다. 역기입니다・・・
4.Excel에 저장
rss_to_excel.pydf.to_excel(excel_writer,item.name)
excel_writer.save()
첫 게시물이었습니다. 인스턴스 메소드를 사용하는 것으로, 「이 사이트 추가하고 싶다」 「이 사이트는 필요없다」라고 하는 때 매우 간단하게 할 수 있습니다.
실은 4번도 인스턴스 메소드로 화려하게 하고 싶었습니다만, 반대로 엉망이었기 때문에 그만두었습니다. 깨끗한 코드를 쓰고 싶습니다. . .
Reference
이 문제에 관하여(여러 사이트의 Tech 기사 제목과 URL을 하나의 Excel로 결합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaka__non/items/59568bd985470bf0d6ab
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import requests
from bs4 import BeautifulSoup
import pandas as pd
#タイトル、URL、拾うタグ、classを変数にする
class WEB_scraping:
def __init__(self,name,url,tag,detail):
self.name=name
self.url=url
self.tag=tag
self.detail=detail
#webページのHTMLをかえす
def response(self):
html = requests.get(self.url).text
return BeautifulSoup(html, 'html.parser')
def find(self,html):
return html.find_all(self.tag,class_=self.detail)
import pandas as pd
from web_scraping import WEB_scraping
item1=WEB_scraping("gizmood","https://www.gizmodo.jp/articles/","h3","p-archive-cardTitle")
item2=WEB_scraping("gigazine","http://gigazine.net/","h2",None)
item3=WEB_scraping("TechCrunch","https://jp.techcrunch.com/","h2","post-title")
item4=WEB_scraping("zdnet","https://japan.zdnet.com/archives/","h3",None)
item5=WEB_scraping("hatenaIT","http://b.hatena.ne.jp/hotentry/it","h3","entrylist-contents-title")
items=[item1,item2,item3,item4,item5]
columns=["タイトル","Url"]
excel_writer = pd.ExcelWriter('result.xlsx')
for item in items:
df=pd.DataFrame(columns=columns)
soup=item.response()
contents=item.find(soup)
for content in contents:
title=content.a.string
#gizmoodとzdnetだけhttps~がget(href)で返ってこないから足す
if item.name=="gizmood":
link="https://www.gizmodo.jp"+content.a.get("href")
elif item.name=="zdnet":
link="https://japan.zdnet.com"+content.a.get("href")
else:
link=content.a.get("href")
se=pd.Series([title,link],columns)
print(se)
df=df.append(se,columns)
df.to_excel(excel_writer,item.name)
excel_writer.save()
Reference
이 문제에 관하여(여러 사이트의 Tech 기사 제목과 URL을 하나의 Excel로 결합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kaka__non/items/59568bd985470bf0d6ab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)