여러 사이트의 Tech 기사 제목과 URL을 하나의 Excel로 결합

첫 투고입니다.

타이틀대로, Tech계 유명 사이트의 신착 기사 타이틀과 그 URL을 1장의 엑셀로 할 수 있는 코드를 썼습니다.

실행 결과↓



타이틀을 한 장의 시트로 확실히 나열 할 수 있다면 좋습니다.

실제 코드



1.WEB_scraping이라는 클래스 안에 4개의 인스턴스 변수를 가지는 인스턴스를 생성(이것이 크롤링하는 사이트)



web_scraping.py
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)

response는 self의 HTML을 반환하는 인스턴스 메서드이고 find는 변수 html에서 특정 tag와 클래스를 찾아 반환하는 인스턴스 메서드입니다.

기본 스크립트에서 인스턴스를 정의합니다.

rss_to_excel.py
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]

인스턴스 변수의 태그와 세부사항은 Chrome 개발자 도구에서 확인했습니다. gigazine과 ZDnet 기사 제목은 클래스가 지정되지 않았기 때문에 detail은 비어 있습니다.

2. 제목과 URL을 열에 포함하는 Excel 만들기



rss_to_excel.py
columns=["タイトル","Url"] 
excel_writer = pd.ExcelWriter('result.xlsx')

3.item을 반복



rss_to_excel.py
for 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.py
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)

검색한 콘텐츠에서 하나씩 기사 제목과 URL을 추출하여 정의한 df에 추가합니다.
gizmood와 zdnet은 href로 돌아오는 문자열이 https://를 포함하지 않기 때문에 더합니다. 역기입니다・・・

4.Excel에 저장



rss_to_excel.py
df.to_excel(excel_writer,item.name)
excel_writer.save()

첫 게시물이었습니다. 인스턴스 메소드를 사용하는 것으로, 「이 사이트 추가하고 싶다」 「이 사이트는 필요없다」라고 하는 때 매우 간단하게 할 수 있습니다.

실은 4번도 인스턴스 메소드로 화려하게 하고 싶었습니다만, 반대로 엉망이었기 때문에 그만두었습니다. 깨끗한 코드를 쓰고 싶습니다. . .

좋은 웹페이지 즐겨찾기