예제 #1
0
def get_document_attributes(attribute_url):
    soup = load_url(attribute_url, return_content=True)
    attribute_page_soup = soup.find("div", attrs={"class": "vbProperties"})
    if attribute_page_soup is not None:
        atts = {}

        expiry_date_soup = soup.find("div", attrs={"class": "vbInfo"}).find_all("li")
        if expiry_date_soup[-1].text.find("Ngày hết hiệu lực") > 0:
            atts["Ngày hết hiệu lực"] = expiry_date_soup.text.replace("Ngày hết hiệu lực:", "").strip()

        for att_soup in attribute_page_soup.find_all("td"):
            if att_soup.has_attr("class") and att_soup["class"][0] == "title" and att_soup.text.find(
                    "Tình trạng hiệu lực") < 0:
                atts["Mô tả"] = att_soup.text.strip()

            elif att_soup.has_attr("class") and att_soup["class"][0] == "title" and att_soup.text.find(
                    "Tình trạng hiệu lực") >= 0:
                atts["Tình trạng"] = att_soup.text.replace("Tình trạng hiệu lực:", "").strip()

            elif att_soup.has_attr("class") and att_soup["class"][0] == "label":
                if att_soup.text.strip() == "Cơ quan ban hành/ Chức danh / Người ký" or att_soup.text.strip() == "Issuing body/ Office/ Signer":
                    atts[att_soup.text.strip()] = []
                    for value in att_soup.find_all_next("td")[:3]:
                        atts[att_soup.text.strip()].append(value.text.strip())
                else:
                    atts[att_soup.text.strip()] = att_soup.find_next("td").text.strip()

        return atts

    else:
        return {}
예제 #2
0
def get_url_from_page__vbpl(sitemap_url):
    sitemap_content = load_url(sitemap_url, return_content=True)
    doc_urls = []
    for doc_soup in sitemap_content.find_all("div", attrs={"class": "item"}):
        doc_url = "http://vbpl.vn/" + doc_soup.p.a["href"]
        doc_urls.append(doc_url)

    return doc_urls
예제 #3
0
def get_document_content_and_title(content_url):
    soup = load_url(content_url, return_content=True)
    bm = soup.find("div", attrs={"class": "box-map"})
    title = bm.find_all("a")[-1].text.strip()

    if content_url.find("van-ban-goc") > 0:
        return ("", title)
    else:
        content = soup.find("div", attrs={"class": "fulltext"})
        content = content.find_all("div")[1]
        for p_tag in content.find_all(True):
            del p_tag["href"]

        return (str(content), title)
def store_sitemaps_and_urls__thuvienphapluat(
        root_path):  # , sitemap_dir, url_file
    start = time.time()
    sitemap_urls = get_all_sitemaps_url(
        "https://thuvienphapluat.vn/sitemap.xml")
    for sitemap_url in tqdm(sitemap_urls[10:11],
                            total=len(sitemap_urls[10:11])):
        file_name = root_path + "/sitemaps/sitemaps_part" + re.findall(
            "(\d+)", sitemap_url)[0] + ".xml"
        write_to_record(
            load_url(sitemap_url, return_content=True).prettify(), file_name)
        document_urls = get_all_document_url(sitemap_url)

        for document_url in document_urls:
            write_to_record(document_url,
                            root_path + "/urls/urls.lines",
                            by_line=True,
                            is_append=True)

    timer = time.time() - start
    # print("Elapsed Time multithread(): %ss" % timer)

    return second_to_hhmmss(timer)
예제 #5
0
def get_document_attributes_from_ajax(url_id):
    url = "https://thuvienphapluat.vn/AjaxLoadData/LoadLuocDo.aspx?LawID=" + url_id
    try:
        soup = load_url(url, return_content=True)
        atts = {}
        atts['Mô tả'] = soup.find("div", attrs={
            "class": "tt"
        }).text.strip()  #None type has no "text"

        for att_soup in soup.find_all("div", attrs={"class": "att"}):
            att_name = att_soup.find("div", attrs={
                "class": "hd fl"
            }).text.strip().replace(":", "")
            att_value = att_soup.find("div", attrs={
                "class": "ds fl"
            }).text.strip()

            atts[att_name] = att_value

        return atts

    except Exception as e:
        print("get_document_attributes_from_ajax error: " + str(e) + " at " +
              str(url))
예제 #6
0
def get_document_schema(schema_url):
    soup = load_url(schema_url, return_content=True)
    if soup.find("div", attrs={"class": "vbLuocdo"}) is not None:
        schemas = {}

        for schema in soup.find_all("div", attrs={"class": "luocdo"}):
            key = schema.find("div", attrs={"class": ["title", "titleht"]}).find_all("a")[-1].text.strip()
            value = []

            for schema_value in schema.find_all("a", attrs={"class": "jTips"}):
                if schema_value["href"] == "#":
                    name = re.sub("( {2,})", "", schema_value.text).replace("\r\n", " ").strip()
                else:
                    name = re.sub("( {2,})", "", schema_value["title"]).replace("\r\n", " ").strip()
                url = "http://vbpl.vn/" + schema_value["href"].strip()
                if [name, url] not in value:
                    value.append([name, url])

            schemas[key] = value

        return schemas

    else:
        return {}
예제 #7
0
def scrapy_thuvienphapluat(url):
    try:
        doc_content = load_url(url, return_content=True)

        extracted_source_id = get_id_from_url(url)
        extracted_attributes = modify_document_attribute(
            get_document_attributes_from_ajax(get_id_from_url(url)))
        extracted_title = extracted_attributes["document_type"][0].strip(
        ) + " " + extracted_attributes["official_number"][0].strip()
        extracted_html_text = get_document_content(doc_content)
        if extracted_html_text == '':
            print("No content at " + url)

        extracted_full_text = extract_raw_text_from_html(extracted_html_text)

        doc_object = {
            "source_id": extracted_source_id,
            "source": "thuvienphapluat.vn",
            "url": url,
            "title": extracted_title,
            "html_text": extracted_html_text,
            "last_updated_time": VERSION,
            "full_text": extracted_full_text,
            "attribute": extracted_attributes,
            "schema": {
                "instructions_documents":
                [],  #Văn bản được HD, QĐ chi tiết (from http://vbpl.vn/)
                "current_documents":
                [],  #Văn bản hiện thời (from http://vbpl.vn/)
                "instructions_give_documents":
                [],  #Văn bản HD, QĐ chi tiết (from http://vbpl.vn/)
                "canceled_documents":
                [],  #Văn bản hết hiệu lực (from http://vbpl.vn/)
                "cancel_documents":
                [],  #Văn bản quy định hết hiệu lực (from http://vbpl.vn/)
                "pursuant_documents":
                [],  # Văn bản căn cứ (from http://vbpl.vn/)
                "suspended_documents":
                [],  #Văn bản bị đình chỉ (from http://vbpl.vn/)
                "suspension_documents":
                [],  # Văn bản đình chỉ (from http://vbpl.vn/)
                "reference_documents":
                [],  #Văn bản dẫn chiếu (from http://vbpl.vn/)
                "other_documents_related":
                [],  # Văn bản liên quan khác (from http://vbpl.vn/)
                "canceled_one_part_documents":
                [],  #Văn bản bị đình chỉ 1 phần (from http://vbpl.vn/)
                "cancel_one_part_documents":
                [],  #Văn bản đình chỉ 1 phần (from http://vbpl.vn/)
                "amended_documents":
                [],  # Văn bản được sửa đổi (from http://vbpl.vn/)
                "amend_documents": [],  #Văn bản sửa đổi (from http://vbpl.vn/)
                "extended_documents":
                [],  #Văn bản được bổ sung (from http://vbpl.vn/)
                "extend_documents":
                [],  #Văn bản bổ sung (from http://vbpl.vn/)
                "suspended_one_part_documents":
                [],  # Văn bản bị đình chỉ 1 phần(from http://vbpl.vn/)
                "suspension_one_part_documents":
                [],  # Văn bản đình chỉ 1 phần(from http://vbpl.vn/)
            }
        }

        return doc_object
    except Exception as e:
        print("scrapy_thuvienphapluat() error: ", e)
예제 #8
0
def get_page_count(url):
    soup = load_url(url, return_content=True)
    result = int(soup.find("a", attrs={"class": "selected"}).span.strong.b.text)
    return math.ceil(result / 50)
예제 #9
0
def get_all_document_url(sitemap_url):
    sitemap_soup = load_url(sitemap_url, return_content=True)

    return get_url_from_sitemap__thuvienphapluat(sitemap_soup)
예제 #10
0
def get_all_sitemaps_url(base_sitemap_url):
    base_sitemap_soup = load_url(base_sitemap_url, return_content=True)

    return get_url_from_sitemap__thuvienphapluat(base_sitemap_soup)