Oleg_Kornilov

Scrapping "https://www.fbi.gov/wanted" v.1.3

Aug 10th, 2016
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.01 KB | None | 0 0
  1. # coding: utf-8
  2.  
  3. import requests #http://docs.python-requests.org/en/master/user/quickstart/#make-a-request
  4. from bs4 import BeautifulSoup #https://www.crummy.com/software/BeautifulSoup/bs4/doc/
  5. import time
  6.  
  7. obamka = '''
  8. ░░█▀░░░░░░░░░░░▀▀███████░░░░
  9. ░░█▌░░░░░░░░░░░░░░░▀██████░░░
  10. ░█▌░░░░░░░░░░░░░░░░███████▌░░
  11. ░█░░░░░░░░░░░░░░░░░████████░░
  12. ▐▌░░░░░░░░░░░░░░░░░▀██████▌░░
  13. ░▌▄███▌░░░░▀████▄░░░░▀████▌░░
  14. ▐▀▀▄█▄░▌░░░▄██▄▄▄▀░░░░████▄▄░
  15. ▐░▀░░═▐░░░░░░══░░▀░░░░▐▀░▄▀▌▌
  16. ▐░░░░░▌░░░░░░░░░░░░░░░▀░▀░░▌▌
  17. ▐░░░▄▀░░░▀░▌░░░░░░░░░░░░▌█░▌▌
  18. ░▌░░▀▀▄▄▀▀▄▌▌░░░░░░░░░░▐░▀▐▐░
  19. ░▌░░▌░▄▄▄▄░░░▌░░░░░░░░▐░░▀▐░░
  20. ░█░▐▄██████▄░▐░░░░░░░░█▀▄▄▀░░
  21. ░▐░▌▌░░░░░░▀▀▄▐░░░░░░█▌░░░░░░
  22. ░░█░░▄▀▀▀▀▄░▄═╝▄░░░▄▀░▌░░░░░░
  23. ░░░▌▐░░░░░░▌░▀▀░░▄▀░░▐░░░░░░░
  24. ░░░▀▄░░░░░░░░░▄▀▀░░░░█░░░░░░░
  25. ░░░▄█▄▄▄▄▄▄▄▀▀░░░░░░░▌▌░░░░░░
  26. ░░▄▀▌▀▌░░░░░░░░░░░░░▄▀▀▄░░░░░
  27. ▄▀░░▌░▀▄░░░░░░░░░░▄▀░░▌░▀▄░░░
  28. ░░░░▌█▄▄▀▄░░░░░░▄▀░░░░▌░░░▌▄▄
  29. ░░░▄▐██████▄▄░▄▀░░▄▄▄▄▌░░░░▄░
  30. ░░▄▌████████▄▄▄███████▌░░░░░▄
  31. ░▄▀░██████████████████▌▀▄░░░░
  32. ▀░░░█████▀▀░░░▀███████░░░▀▄░░
  33. ░░░░▐█▀░░░▐░░░░░▀████▌░░░░▀▄░
  34. ░░░░░░▌░░░▐░░░░▐░░▀▀█░░░░░░░▀
  35. ░░░░░░▐░░░░▌░░░▐░░░░░▌░░░░░░░
  36. ░╔╗║░╔═╗░═╦═░░░░░╔╗░░╔═╗░╦═╗░
  37. ░║║║░║░║░░║░░░░░░╠╩╗░╠═╣░║░║░
  38. ░║╚╝░╚═╝░░║░░░░░░╚═╝░║░║░╩═╝░
  39.  
  40.  
  41.  
  42. '''
  43.  
  44. #TODO: получить всю инфу по всем в ссылке
  45. #1. получить исходный код ссылки
  46. URL = 'https://www.fbi.gov/wanted/topten'
  47.  
  48. list_of_links = [] #список ссылок
  49.  
  50. #определим имя данного преступника для подстановки в имя файла
  51. NAME = ''
  52. #определим переменные для записи в файл
  53. DOCHEADING = ''
  54. SUMMARY = ''
  55. ALIASES = ''
  56. DESCRIPTION = []
  57. REWARD = ' '
  58. REMARKS = ' '
  59. CAUTION = ' '
  60.  
  61. n = 0
  62.  
  63. def get_soup(URL):
  64.     r = requests.get(URL)
  65.     soup = BeautifulSoup(r.content, 'lxml')
  66.     return soup
  67.    
  68. soup = get_soup(URL)
  69.  
  70. #2. получим список ссылок всех 10 преступников по ссылке URL
  71. def get_names(soup=soup):
  72.     global list_of_links
  73.     for name in soup.find_all('h3', class_='title'):
  74.         links = name.find_all('a')
  75.         for claster in links:
  76.             link = (claster.get('href'))
  77.             list_of_links.append(link)
  78.    
  79. #3. теперь надо обойти каждую ссылку в листе и вытащить всю инфу
  80. def get_info():
  81.     global DOCHEADING, SUMMARY, ALIASES, DESCRIPTION, REWARD, REMARKS, CAUTION, NAME
  82.     url = list_of_links[n] #каждый элемент листа - ссылка на преступника
  83.     r = requests.get(url)
  84.     soup = BeautifulSoup(r.content, 'lxml')
  85.    
  86.     #0. имя преступника
  87.     delictName = soup.find_all('h1', class_='documentFirstHeading')[0].text.lower()
  88.     NAME = delictName.replace(' ', '-') #yaser-abdel-said для подстановки в URL
  89.    
  90.     #1. заголовок, правонарушение
  91.     #1.1. заголовок - в <h1 class="documentFirstHeading">
  92.     docHeading = soup.find_all('h1', class_='documentFirstHeading')[0].text # == LUIS MACEDO
  93.    
  94.     #1.2 получим обвинения
  95.     summary = soup.find_all('p', class_='summary')[0].text # Unlawful Flight to Avoid Prosecution - First Degree Murder
  96.    
  97.     #2. псевдонимы
  98.     Aliases = soup.find_all('div', class_='wanted-person-aliases')[0].text #Aliases:
  99.                                                                            #"Ye-Ye", Luis Macebo, Luis M. Macedo, Louis Macedo, Louis M. Macedo, Luis M. Maczdo, Luis M. Mercado
  100.     #3. описание
  101.     Description = soup.find_all('table', class_='table table-striped wanted-person-description')[0].find_all('td')
  102.     for element in Description:
  103.         description = element.text + '\n' #Date(s) of Birth Used
  104.         DESCRIPTION.append(description)   #March 2, 1988, February 3, 1988, March 3, 1988, March 8, 1988, March 22, 1988  etc.
  105.    
  106.     #4. награда
  107.     rewardTitle = soup.find_all('div', class_='wanted-person-reward')[0].find('h3').text + '\n'            #Reward:
  108.     rewardText = soup.find_all('div', class_='wanted-person-reward')[0].find('p').text                     #The FBI is offering a reward of up to $100,000 for information leading directly to the arrest of Yaser Abdel Said.
  109.    
  110.     #5. примечания
  111.     remarksTitle = soup.find_all('div', class_='wanted-person-remarks')[0].find('h3').text + '\n'              
  112.     remarksText = soup.find_all('div', class_='wanted-person-remarks')[0].find('p').text    
  113.        
  114.    
  115.     #6. осторожно!
  116.     cautionTitle = soup.find_all('div', class_='wanted-person-caution')[0].find('h3').text + '\n'              
  117.     cautionText = soup.find_all('div', class_='wanted-person-caution')[0].find('p').text    
  118.        
  119.    
  120.     DOCHEADING = docHeading + '\n'
  121.     SUMMARY = summary + '\n'
  122.     ALIASES = Aliases + '\n'
  123.     REWARD = '\n\n' + rewardTitle + rewardText
  124.     REMARKS = '\n\n' + remarksTitle + remarksText
  125.     CAUTION = '\n\n' + cautionTitle + cautionText
  126.     #print(DOCHEADING, SUMMARY, ALIASES, DESCRIPTION, REWARD)
  127.    
  128. def write():
  129.     global DESCRIPTION
  130.     #для возможности подстановки в имя файла имени преступника:
  131.     x = ('C:\\Users\\олег\\Python34\\requestsAndSoup\\fbi.gov\\%s.txt' % (NAME))
  132.     with open(x, 'w') as x:
  133.         for i in DOCHEADING:
  134.             x.write(i)
  135.         for i in SUMMARY:
  136.             x.write(i)
  137.         for i in ALIASES:
  138.             x.write(i)
  139.         for index, element in enumerate(DESCRIPTION):
  140.             if index % 2 != 0:
  141.                 element += '\n'
  142.                 x.write(element)
  143.             else:
  144.                 x.write(element)
  145.         for i in REWARD:
  146.             x.write(i)
  147.         for i in REMARKS:
  148.             x.write(i)  
  149.         for i in CAUTION:
  150.             x.write(i)
  151.            
  152.     DESCRIPTION = []            
  153.     x.close()
  154.  
  155. def change_n():
  156.     global n
  157.     n += 1
  158.  
  159. def main():
  160.     while n <= len(list_of_links) + 1:  
  161.        
  162.         get_names(soup=soup)  
  163.         get_info()
  164.         write()
  165.         #time.sleep(4)        
  166.         change_n()
  167.         for row in obamka:
  168.             print(row, end = '')
  169.             time.sleep(0.04)
  170.     print(list_of_links)
  171.  
  172.        
  173. main()
Add Comment
Please, Sign In to add comment