collinsanele

selo_scraper2.py

Mar 27th, 2020
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.35 KB | None | 0 0
  1. #Import all modules/libraries
  2.  
  3. import requests
  4. from bs4 import BeautifulSoup
  5. import pandas as pd
  6. import time
  7. from tqdm import tqdm
  8. import os
  9.  
  10.  
  11.  
  12. print("Starting scraping for second site..")
  13.  
  14. company_links = []
  15. results2 = []
  16. final_region_links = []
  17.  
  18. r = requests.get("https://www.bobex.be/control/directory")
  19. soup = BeautifulSoup(r.content, "html.parser")
  20.  
  21. region_links = [link.get("href") for link in soup.findAll(class_="linkblock")]
  22.  
  23. #all_links = ["https://"+"".join(link.split("/")[1:3])+"/control/directory?language=nl&ti="+link.split("/")[3]+"&region.id="+link[-1] for link in all_links]
  24.  
  25.  
  26. print("Getting links for all regions...")
  27. for region_link in tqdm(region_links):
  28.     r = requests.get(region_link)
  29.     soup = BeautifulSoup(r.content, "html.parser")
  30.    
  31.     services_list = [item.get("data-ti") for item in soup.find("select", {"id":"type.id"}).findAll("option")]
  32.     values = [item.get("value") for item in soup.find("select", {"id":"type.id"}).findAll("option")]
  33.    
  34.     for index, item in enumerate(services_list):
  35.         sublink = "https://www.bobex.be/control/search_local2?language=nl&ti="+services_list[index]+"&type.id="+values[index]+"&region.id="+region_link[-1]
  36.         final_region_links.append(sublink.strip())
  37.  
  38.  
  39. #Take the set of final_region_links keeping its order/arrangement
  40. final_region_links = sorted(set(final_region_links), key=final_region_links.index)
  41.  
  42.  
  43.  
  44.  
  45. #Get all company links from final_region_links
  46. print("Getting all company links...")
  47. for link_item in tqdm(final_region_links):
  48.     r = requests.get(link_item)  
  49.     soup = BeautifulSoup(r.content, "html.parser")
  50.  
  51.     cards = soup.findAll("div", class_="col-12")
  52.  
  53.     for card in cards:
  54.         try:
  55.             company_link = card.find("a").get("href")
  56.             company_links.append(company_link)
  57.  
  58.         except Exception:
  59.             pass
  60.  
  61.  
  62.  
  63. company_links = [link for link in company_links if link[-1] in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") and "http" in link]
  64.  
  65. company_links = sorted(set(company_links), key=company_links.index)
  66.  
  67. print("There are " + str(len(set(company_links))) + " company links")
  68.  
  69.  
  70. #Getting the required data from all company links
  71. for link in tqdm(company_links[0:]):
  72.     obj = {}
  73.     obj["Company Link"] = link
  74.  
  75.     raw_services = ""
  76.     services = ""
  77.     company_name = ""
  78.  
  79.     try:
  80.         r = requests.get(link)
  81.         soup = BeautifulSoup(r.content, "html.parser")
  82.  
  83.     except Exception as e:
  84.         soup = ""
  85.         print(e)
  86.         pass
  87.  
  88.  
  89.     try:
  90.         company_name = soup.find("h1", class_="font1em7").text.strip()  
  91.  
  92.     except:
  93.         pass
  94.  
  95.  
  96.     try:
  97.         raw_services = soup.find("div", {"id":"activities"}).findAll("a")
  98.         services = ", ".join([item.text.strip() for item in raw_services])
  99.  
  100.     except Exception as e:
  101.         pass
  102.  
  103.  
  104.     obj["Services"] = services
  105.     obj["Company Name"] = company_name
  106.  
  107.     results2.append(obj)
  108.    
  109.  
  110.    
  111. #results2 = [item for item in results2 if item["Services"] != ""]
  112.    
  113.    
  114. df2 = pd.DataFrame(results2)
  115. df2 = df2[["Company Link", "Company Name", "Services"]]
  116. df2 = pd.concat([df2, df2["Services"].str.split(', ', expand=True)], axis=1)
  117. df2 = df2.drop_duplicates(["Company Link"])
  118. df2.to_excel("results2.xlsx", index=False)
  119.  
  120.    
  121. print("Done!")
  122. print("Check " + str(os.getcwd()) + " for the result")
Advertisement
Add Comment
Please, Sign In to add comment