Skip to content

Instantly share code, notes, and snippets.

@mekhami
Created October 3, 2015 03:14
Show Gist options
  • Select an option

  • Save mekhami/928bad6a22a5ce3c1f2d to your computer and use it in GitHub Desktop.

Select an option

Save mekhami/928bad6a22a5ce3c1f2d to your computer and use it in GitHub Desktop.
Attempting an entry for Raul Ruiz
Ruiz
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/vagrant/.virtualenvs/politracker/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/home/vagrant/.virtualenvs/politracker/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/vagrant/.virtualenvs/politracker/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/vagrant/.virtualenvs/politracker/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/vagrant/politracker/finder/management/commands/pic_scrape.py", line 26, in handle
self.create_or_update(leg)
File "/home/vagrant/politracker/finder/management/commands/pic_scrape.py", line 30, in create_or_update
leg['last_name']))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 1: ordinal not in range(128)
from django.core.management.base import BaseCommand, CommandError
from bs4 import BeautifulSoup
import requests
import sunlight
from politracker.settings import base
from finder.models import Legislator
sunlight.config.API_KEY = base.SUNLIGHT_API
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('--bioguide',
type=str,
help="Bioguide ID for a specific representative to update",
dest='bioguide')
def handle(self, *args, **options):
if options.get('bioguide', False):
legs = [sunlight.congress.legislator(options['bioguide'])]
else:
legs = sunlight.congress.all_legislators_in_office()
for leg in legs:
self.create_or_update(leg)
def create_or_update(self, leg):
self.stdout.write("Attempting an entry for {} {}".format(leg['first_name'],
leg['last_name']))
obj, created = Legislator.objects.get_or_create(
bioguide_id=leg['bioguide_id'],
defaults={
'first_name': leg['first_name'],
'last_name': leg['last_name'],
'congress_image_url': scrape_congress_image_url(leg['first_name'],
leg['last_name'],
leg['bioguide_id']),
}
)
if created:
self.stdout.write("Created a new entry for {} {}".format(leg['first_name'],
leg['last_name']))
else:
self.stdout.write("Updating image url for {} {}".format(leg['first_name'], leg['last_name']))
obj.congress_image_url = scrape_congress_image_url(leg['first_name'],
leg['last_name'],
leg['bioguide_id'])
obj.save()
def scrape_congress_image_url(firstname, lastname, bioguide):
page = requests.get('https://www.congress.gov/member/{}-{}/{}'.format(firstname, lastname, bioguide))
soup = BeautifulSoup(page.text, "html.parser")
try:
img = soup.find('div', attrs={'class': 'member_picture'}).a.get('href')
return 'https://www.congress.gov/{}'.format(img)
except AttributeError:
# Some members don't have photos, so we'll skip those.
return 'http://2.bp.blogspot.com/-6QyJDHjB5XE/Uscgo2DVBdI/AAAAAAAACS0/DFSFGLBK_fY/s1600/facebook-default-no-profile-pic.jpg'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment