유명현

Implement daangn crawler

1 +from base64 import encode
2 +from bs4 import BeautifulSoup
3 +import requests
4 +import json
5 +
6 +def save_json(parsed_items):
7 + with open('./sample.json', 'w') as f:
8 + json.dump(parsed_items, f, indent=2, ensure_ascii=False)
9 +
10 +def convert_item_to_dict(item):
11 + dict_item = {}
12 + dict_item["item-thumbnail"] = item.find("img")["src"]
13 + dict_item["item-title"] = item.find("span", class_="article-title").text.strip()
14 + dict_item["item-content"] = item.find("span", class_="article-content").text.strip()
15 + dict_item["item-region"] = item.find("p", class_="article-region-name").text.strip()
16 + dict_item["item-price"] = item.find("p", class_="article-price").text.strip()
17 + if(item.find("span", class_="article-watch") == None):
18 + dict_item["item-watch-count"] = '0'
19 + else:
20 + dict_item["item-watch-count"] = item.find("span", class_="article-watch").text.strip()
21 + return dict_item
22 +
23 +# def convert_item_to_json(item):
24 +# dict_item = {}
25 +# dict_item["item-thumbnail"] = item.find("img")["src"]
26 +# dict_item["item-title"] = item.find("span", class_="article-title").text.strip()
27 +# dict_item["item-content"] = item.find("span", class_="article-content").text.strip()
28 +# dict_item["item-region"] = item.find("p", class_="article-region-name").text.strip()
29 +# dict_item["item-price"] = item.find("p", class_="article-price").text.strip()
30 +# if(item.find("span", class_="article-watch") == None):
31 +# dict_item["item-watch-count"] = '0'
32 +# else:
33 +# dict_item["item-watch-count"] = item.find("span", class_="article-watch").text.strip()
34 +
35 +# json_item = json.dumps(dict_item, ensure_ascii=False)
36 +# return json_item
37 +
38 +def crawl(keyword):
39 + if type(keyword) != type("test string"):
40 + return "Error: Invalid Keyword"
41 +
42 + BASE_URL = "https://www.daangn.com/search/"
43 + URL = BASE_URL + keyword
44 + res = requests.get(URL)
45 + html = res.text
46 + soup = BeautifulSoup(html, 'html.parser')
47 +
48 + items = soup.select('.flea-market-article-link')
49 + parsed_items = {}
50 + parsed_items["length"] = str(len(items))
51 + parsed_items["items"] = []
52 + for i in range (0, len(items)):
53 + item = items[i]
54 + json_item = convert_item_to_dict(item)
55 + parsed_items["items"].append(json_item)
56 +
57 + save_json(parsed_items)
58 + json_items = json.dumps(parsed_items, ensure_ascii=False, indent=2)
59 + return json_items
60 +
61 +if __name__ == "__main__":
62 + print(crawl("RTX 3080"))
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "length": "6",
3 + "items": [
4 + {
5 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202205/ADB1646017CBA520AA41B245956BD92B3DAA3D2A4372779F2233456B94ED531E.jpg?q=82&s=300x300&t=crop",
6 + "item-title": "12600k + rtx3080 게이밍pc 데스크탑",
7 + "item-content": "3월에 구매해서 2달가량 사용했습니다\n\n컴퓨존 기준 225정도 나옵니다\n\n궁금하신점은 문의주세요\n\ncpu : i5-12600k\nm/b : asus rog strix b660-a wifi stcom\n램 : 삼성 ddr4-25600 32gb (16x2)\n그래픽카드 : msi rtx3080 gaming z trio 10gb\nssd : sk p31 500gb\n쿨러 : rc400 화이트\n파워 : 마이크로닉스 클래식2 850w 풀모듈러 화이트\n케이스 : 앱코 p1000 화이트",
8 + "item-region": "경기도 안양시 동안구 비산2동",
9 + "item-price": "1,800,000원",
10 + "item-watch-count": "2"
11 + },
12 + {
13 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202205/F0A3C9B8A7A6AE705E768AA714CDA90C42FE8416B91C6D02606F8CFE370853AD.jpg?q=82&s=300x300&t=crop",
14 + "item-title": "RTX3080 12g 기가바이트 이글 미개봉",
15 + "item-content": "RTX3080 12g 기가바이트 이글 미개봉 팝니다\n미개봉품 2차구매했는데 다른거 구해서 팔아요\n3080 12기가중 전국최저가",
16 + "item-region": "경북 칠곡군 석적읍",
17 + "item-price": "950,000원",
18 + "item-watch-count": "1"
19 + },
20 + {
21 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202205/05c55f346c00c7a0a95c91db4ee35aa86d3ccc20f870bdea7b5edff006dc33ae.webp?q=82&s=300x300&t=crop",
22 + "item-title": "rtx 3080 msi suprim x",
23 + "item-content": "3월에 주문했는데\n대한통운 파업때문에 1달정도 밖에 사용안했습니다\n채굴x 흡연x 반려동물 x\n게임용도로만 사용했으며\n하자없습니다\n직거래는 수원이며 집앞까지 오시면 2만원 깎아드려요\nrtx3080 슈프림 x",
24 + "item-region": "경기도 수원시 팔달구 매산로2가",
25 + "item-price": "1,050,000원",
26 + "item-watch-count": "4"
27 + },
28 + {
29 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202203/185b1b0a4a5bf7a2b1b9c7ec37803bab70dbb09fc436d085eb298df557991b19.webp?q=82&s=300x300&t=crop",
30 + "item-title": "게이밍 본체 AMD라이젠7-5800X 지포스RTX3080",
31 + "item-content": "21년10중순이후사용 아우스3년as\n앞으로2년6개월정도남았습니다. 삼성16램추가 총32기가 수냉식! 홀로남아있어요.거의 사용 안함.\n아들이 고1이라서 시간이 없어 판매중입니다",
32 + "item-region": "부산 연제구 거제제4동",
33 + "item-price": "3,200,000원",
34 + "item-watch-count": "5"
35 + },
36 + {
37 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202204/e2081b5dd2f5f0c18f5c692f9ad3d206beee493aec4d3b2ca6909f172499efd0.webp?q=82&s=300x300&t=crop",
38 + "item-title": "게이밍노트북 / 지포스 RTX 3080그래픽 RAZER BLADE 15 Advanced 10Gen R3080 FHD",
39 + "item-content": "시용한지 1년안된 노트북 판매합니다\n모든게임 풀가능\n\n■ 구입 시기\n\n구입 날짜 : 2021. 8\n\n실 개봉 일자 : 2021. 9\n\n구매 금액 : 3,700,000원\n\n■ 배터리 정보\n\n배터리 수명 97.58% 이며 외관 상태 거의 사용감 없습니다.\n\n■ 노트북 정보\n\n품명 / 모델명\n\n노트북 / RAZER BLADE 15 Advanced 10Gen R3080 FHD\n\nR-R-raz-RZ09-0367 / XU100277-19018D\n\n크기\n\n16.99 x 235 x 355 mm\n\n무게\n\n무게 2.01kg\n\n주요 사양\n\n39.62cm(15.6인치) / 인텔 / 코어i7-10세대 / 코멧레이크 / i7-10875H / 2.3GHz(5.1GHz) / 운영체제(OS): 윈도우10 / sRGB 100% / 지포스 RTX 3080 / 32GB 메모리 / SSD 1TB\n\n기본 구성품 박스 포함 (전원 케이블, 노트북 본체)입니다",
40 + "item-region": "경기도 고양시 일산서구 주엽1동",
41 + "item-price": "2,600,000원",
42 + "item-watch-count": "6"
43 + },
44 + {
45 + "item-thumbnail": "https://dnvefa72aowie.cloudfront.net/origin/article/202205/51f62ae1015fa1ac98f0b1c677625d657336a06950180104a7fb809f13e7fe90.webp?q=82&s=300x300&t=crop",
46 + "item-title": "RTX3080 10GB LHR 화이트스트릭스(화스) 판매합니다",
47 + "item-content": "21/08/03) 컴퓨존에서 구입한제품입니다\n\n기스 하나없이 사용했으며 풀박스구성으로 반지,스트랩등 구성품 전부 미사용입니다\n\n(포트마개 한개가 분실되어 이점만 유의부탁드려요)\n\n제 시스템상 고주파는 양호해서 문제없이 사용했었습니다\n\n거래명세서도 출력해서 같이 드려요\n\n+ 당일 동일제품 중고나라 시세맞춰서 가격잡았습니다 무리한 네고는 답변안합니다",
48 + "item-region": "경기도 수원시 영통구 망포동",
49 + "item-price": "1,220,000원",
50 + "item-watch-count": "2"
51 + }
52 + ]
53 +}
...\ No newline at end of file ...\ No newline at end of file