We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
NE failing since at least 2018-06-28
NE has been failing since 2018-06-28

Based on automated runs it appears that NE has not run successfully in 2 days (2018-06-28).


```
  02:30:54 INFO pupa: save membership 5b4c2cb2-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5b4c30ea-7b6e-11e8-9e19-02e29baaa692.json
02:30:54 INFO pupa: save membership 5b4c2cb2-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5b4c3400-7b6e-11e8-9e19-02e29baaa692.json
02:30:54 INFO scrapelib: GET - http://news.legislature.ne.gov/dist44
02:30:55 INFO pupa: save person Dan Hughes as person_5bea39ca-7b6e-11e8-9e19-02e29baaa692.json
02:30:55 INFO pupa: save membership 5bea39ca-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5bea3dda-7b6e-11e8-9e19-02e29baaa692.json
02:30:55 INFO pupa: save membership 5bea39ca-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5bea4028-7b6e-11e8-9e19-02e29baaa692.json
02:30:55 INFO scrapelib: GET - http://news.legislature.ne.gov/dist45
02:30:56 INFO pupa: save person Sue Crawford as person_5c938c46-7b6e-11e8-9e19-02e29baaa692.json
02:30:56 INFO pupa: save membership 5c938c46-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5c93909c-7b6e-11e8-9e19-02e29baaa692.json
02:30:56 INFO pupa: save membership 5c938c46-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5c93939e-7b6e-11e8-9e19-02e29baaa692.json
02:30:56 INFO scrapelib: GET - http://news.legislature.ne.gov/dist46
02:30:57 INFO pupa: save person Adam Morfeld as person_5d0a16ea-7b6e-11e8-9e19-02e29baaa692.json
02:30:57 INFO pupa: save membership 5d0a16ea-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5d0a1ae6-7b6e-11e8-9e19-02e29baaa692.json
02:30:57 INFO pupa: save membership 5d0a16ea-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5d0a1d2a-7b6e-11e8-9e19-02e29baaa692.json
02:30:57 INFO scrapelib: GET - http://news.legislature.ne.gov/dist47
02:30:58 INFO pupa: save person Steve Erdman as person_5dc322ac-7b6e-11e8-9e19-02e29baaa692.json
02:30:58 INFO pupa: save membership 5dc322ac-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5dc32694-7b6e-11e8-9e19-02e29baaa692.json
02:30:58 INFO pupa: save membership 5dc322ac-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5dc32afe-7b6e-11e8-9e19-02e29baaa692.json
02:30:58 INFO scrapelib: GET - http://news.legislature.ne.gov/dist48
02:30:59 INFO pupa: save person John Stinner as person_5e89a800-7b6e-11e8-9e19-02e29baaa692.json
02:30:59 INFO pupa: save membership 5e89a800-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5e89ac4c-7b6e-11e8-9e19-02e29baaa692.json
02:30:59 INFO pupa: save membership 5e89a800-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5e89aed6-7b6e-11e8-9e19-02e29baaa692.json
02:30:59 INFO scrapelib: GET - http://news.legislature.ne.gov/dist49
02:31:00 INFO pupa: save person John Murante as person_5ed7988a-7b6e-11e8-9e19-02e29baaa692.json
02:31:00 INFO pupa: save membership 5ed7988a-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "legislature"} as membership_5ed79c90-7b6e-11e8-9e19-02e29baaa692.json
02:31:00 INFO pupa: save membership 5ed7988a-7b6e-11e8-9e19-02e29baaa692 membership in ~{"classification": "party", "name": "Nonpartisan"} as membership_5ed79ede-7b6e-11e8-9e19-02e29baaa692.json
02:31:00 INFO scrapelib: GET - http://www.nebraskalegislature.gov/committees/standing-committees.php
02:31:00 INFO scrapelib: GET - http://www.nebraskalegislature.gov/committees/select-committees.php
02:31:01 WARNING pupa: No members found in Select committees committee.
02:31:01 WARNING pupa: No members found in Special committees committee.
Traceback (most recent call last):
  File "/opt/openstates/venv-pupa//bin/pupa", line 11, in <module>
    load_entry_point('pupa', 'console_scripts', 'pupa')()
  File "/opt/openstates/venv-pupa/src/pupa/pupa/cli/__main__.py", line 68, in main
    subcommands[args.subcommand].handle(args, other)
  File "/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py", line 260, in handle
    return self.do_handle(args, other, juris)
  File "/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py", line 305, in do_handle
    report['scrape'] = self.do_scrape(juris, args, scrapers)
  File "/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py", line 173, in do_scrape
    report[scraper_name] = scraper.do_scrape(**scrape_args)
  File "/opt/openstates/venv-pupa/src/pupa/pupa/scrape/base.py", line 120, in do_scrape
    raise ScrapeError('no objects returned from {} scrape'.format(self.__class__.__name__))
pupa.exceptions.ScrapeError: no objects returned from NECommitteeScraper scrape
loaded Open States pupa settings...
ne (scrape, import)
  bills: {}
  votes: {}
  people: {}
  committees: {}
```

Visit http://bobsled.openstates.org for more info.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `openstates/ne/committees.py`
Content:
```
1 import re
2 
3 from pupa.scrape import Scraper, Organization
4 
5 from openstates.utils import LXMLMixin
6 
7 
8 class NECommitteeScraper(Scraper, LXMLMixin):
9     def _scrape_standing_committees(self):
10         """Scrapes the Standing Committees page of the Nebraska state
11         legislature."""
12         main_url = 'http://www.nebraskalegislature.gov/committees/standing-committees.php'
13         page = self.lxmlize(main_url)
14 
15         committee_nodes = self.get_nodes(
16             page,
17             '//div[@class="main-content"]/div[@class="panel panel-leg"][1]/'
18             'div[@class="list-group"]/a[@class="list-group-item"]')
19 
20         for committee_node in committee_nodes:
21             committee_page_url = committee_node.attrib['href']
22             committee_page = self.lxmlize(committee_page_url)
23 
24             name_text = self.get_node(
25                 committee_page,
26                 '//div[@class="container view-front"]/div[@class="row"]/'
27                 'div[@class="col-sm-6 col-md-7"]/h1/text()[normalize-space()]')
28             name = name_text.split()[0:-1]
29 
30             committee_name = ''
31             for x in range(len(name)):
32                 committee_name += name[x] + ' '
33             committee_name = committee_name[0: -1]
34 
35             org = Organization(name=committee_name, chamber='legislature',
36                                classification='committee')
37 
38             members = self.get_nodes(
39                 committee_page,
40                 '//div[@class="col-sm-4 col-md-3 ltc-col-right"][1]/'
41                 'div[@class="block-box"][1]/ul[@class="list-unstyled '
42                 'feature-content"]/li/a/text()[normalize-space()]')
43 
44             for member in members:
45                 member_name = re.sub(r'\Sen\.\s+', '', member)
46                 member_name = re.sub(r', Chairperson', '', member_name).strip()
47                 if 'Chairperson' in member:
48                     member_role = 'Chairperson'
49                 else:
50                     member_role = 'member'
51                 org.add_member(member_name, member_role)
52 
53             org.add_source(main_url)
54             org.add_source(committee_page_url)
55 
56             yield org
57 
58     def _scrape_select_special_committees(self):
59         """Scrapes the Select and Special Committees page of the
60         Nebraska state legislature."""
61         main_url = 'http://www.nebraskalegislature.gov/committees/select-committees.php'
62         page = self.lxmlize(main_url)
63 
64         committee_nodes = self.get_nodes(
65             page,
66             '//div[@class="main-content"]/div[@class="panel panel-leg"]')
67 
68         for committee_node in committee_nodes:
69             committee_name = self.get_node(
70                 committee_node,
71                 './/h2[@class="panel-title"]/text()[normalize-space()]')
72 
73             if committee_name is None:
74                 committee_name = self.get_node(
75                     committee_node,
76                     './/h2[@class="panel-title"]/a/text()[normalize-space()]')
77 
78             org = Organization(name=committee_name, chamber='legislature',
79                                classification='committee')
80             org.add_source(main_url)
81 
82             members = self.get_nodes(
83                 committee_node,
84                 './div[@class="list-group"]/a[@class="list-group-item"]/'
85                 'text()[normalize-space()]')
86 
87             for member in members:
88                 member_name = re.sub(r'\Sen\.\s+', '', member)
89                 member_name = re.sub(r', Chairperson', '', member_name).strip()
90                 if 'Chairperson' in member:
91                     member_role = 'Chairperson'
92                 else:
93                     member_role = 'member'
94                 org.add_member(member_name, member_role)
95 
96             if not org._related:
97                 self.warning('No members found in {} committee.'.format(
98                     org.name))
99             else:
100                 yield org
101 
102     def scrape(self):
103         yield from self._scrape_standing_committees()
104         yield from self._scrape_select_special_committees()
105
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/openstates/ne/committees.py b/openstates/ne/committees.py
--- a/openstates/ne/committees.py
+++ b/openstates/ne/committees.py
@@ -14,8 +14,9 @@
 
         committee_nodes = self.get_nodes(
             page,
-            '//div[@class="main-content"]/div[@class="panel panel-leg"][1]/'
-            'div[@class="list-group"]/a[@class="list-group-item"]')
+            '//a[@class="accordion-switch"][contains(text(), "Standing Committees")]'
+            '/ancestor::div[@class="panel panel-leg"]//div[@class="list-group"]'
+            '/a[@class="list-group-item"]')
 
         for committee_node in committee_nodes:
             committee_page_url = committee_node.attrib['href']
@@ -63,7 +64,8 @@
 
         committee_nodes = self.get_nodes(
             page,
-            '//div[@class="main-content"]/div[@class="panel panel-leg"]')
+            '//a[contains(@class, "accordion-switch")]'
+            '/ancestor::div[@class="panel panel-leg"]')
 
         for committee_node in committee_nodes:
             committee_name = self.get_node(
@@ -81,8 +83,8 @@
 
             members = self.get_nodes(
                 committee_node,
-                './div[@class="list-group"]/a[@class="list-group-item"]/'
-                'text()[normalize-space()]')
+                './/a[@class="list-group-item"]'
+                '/text()[normalize-space()]')
 
             for member in members:
                 member_name = re.sub(r'\Sen\.\s+', '', member)

{"golden_diff": "diff --git a/openstates/ne/committees.py b/openstates/ne/committees.py\n--- a/openstates/ne/committees.py\n+++ b/openstates/ne/committees.py\n@@ -14,8 +14,9 @@\n \n         committee_nodes = self.get_nodes(\n             page,\n-            '//div[@class=\"main-content\"]/div[@class=\"panel panel-leg\"][1]/'\n-            'div[@class=\"list-group\"]/a[@class=\"list-group-item\"]')\n+            '//a[@class=\"accordion-switch\"][contains(text(), \"Standing Committees\")]'\n+            '/ancestor::div[@class=\"panel panel-leg\"]//div[@class=\"list-group\"]'\n+            '/a[@class=\"list-group-item\"]')\n \n         for committee_node in committee_nodes:\n             committee_page_url = committee_node.attrib['href']\n@@ -63,7 +64,8 @@\n \n         committee_nodes = self.get_nodes(\n             page,\n-            '//div[@class=\"main-content\"]/div[@class=\"panel panel-leg\"]')\n+            '//a[contains(@class, \"accordion-switch\")]'\n+            '/ancestor::div[@class=\"panel panel-leg\"]')\n \n         for committee_node in committee_nodes:\n             committee_name = self.get_node(\n@@ -81,8 +83,8 @@\n \n             members = self.get_nodes(\n                 committee_node,\n-                './div[@class=\"list-group\"]/a[@class=\"list-group-item\"]/'\n-                'text()[normalize-space()]')\n+                './/a[@class=\"list-group-item\"]'\n+                '/text()[normalize-space()]')\n \n             for member in members:\n                 member_name = re.sub(r'\\Sen\\.\\s+', '', member)\n", "issue": "NE failing since at least 2018-06-28\nNE has been failing since 2018-06-28\n\nBased on automated runs it appears that NE has not run successfully in 2 days (2018-06-28).\n\n\n```\n  02:30:54 INFO pupa: save membership 5b4c2cb2-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5b4c30ea-7b6e-11e8-9e19-02e29baaa692.json\n02:30:54 INFO pupa: save membership 5b4c2cb2-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5b4c3400-7b6e-11e8-9e19-02e29baaa692.json\n02:30:54 INFO scrapelib: GET - http://news.legislature.ne.gov/dist44\n02:30:55 INFO pupa: save person Dan Hughes as person_5bea39ca-7b6e-11e8-9e19-02e29baaa692.json\n02:30:55 INFO pupa: save membership 5bea39ca-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5bea3dda-7b6e-11e8-9e19-02e29baaa692.json\n02:30:55 INFO pupa: save membership 5bea39ca-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5bea4028-7b6e-11e8-9e19-02e29baaa692.json\n02:30:55 INFO scrapelib: GET - http://news.legislature.ne.gov/dist45\n02:30:56 INFO pupa: save person Sue Crawford as person_5c938c46-7b6e-11e8-9e19-02e29baaa692.json\n02:30:56 INFO pupa: save membership 5c938c46-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5c93909c-7b6e-11e8-9e19-02e29baaa692.json\n02:30:56 INFO pupa: save membership 5c938c46-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5c93939e-7b6e-11e8-9e19-02e29baaa692.json\n02:30:56 INFO scrapelib: GET - http://news.legislature.ne.gov/dist46\n02:30:57 INFO pupa: save person Adam Morfeld as person_5d0a16ea-7b6e-11e8-9e19-02e29baaa692.json\n02:30:57 INFO pupa: save membership 5d0a16ea-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5d0a1ae6-7b6e-11e8-9e19-02e29baaa692.json\n02:30:57 INFO pupa: save membership 5d0a16ea-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5d0a1d2a-7b6e-11e8-9e19-02e29baaa692.json\n02:30:57 INFO scrapelib: GET - http://news.legislature.ne.gov/dist47\n02:30:58 INFO pupa: save person Steve Erdman as person_5dc322ac-7b6e-11e8-9e19-02e29baaa692.json\n02:30:58 INFO pupa: save membership 5dc322ac-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5dc32694-7b6e-11e8-9e19-02e29baaa692.json\n02:30:58 INFO pupa: save membership 5dc322ac-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5dc32afe-7b6e-11e8-9e19-02e29baaa692.json\n02:30:58 INFO scrapelib: GET - http://news.legislature.ne.gov/dist48\n02:30:59 INFO pupa: save person John Stinner as person_5e89a800-7b6e-11e8-9e19-02e29baaa692.json\n02:30:59 INFO pupa: save membership 5e89a800-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5e89ac4c-7b6e-11e8-9e19-02e29baaa692.json\n02:30:59 INFO pupa: save membership 5e89a800-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5e89aed6-7b6e-11e8-9e19-02e29baaa692.json\n02:30:59 INFO scrapelib: GET - http://news.legislature.ne.gov/dist49\n02:31:00 INFO pupa: save person John Murante as person_5ed7988a-7b6e-11e8-9e19-02e29baaa692.json\n02:31:00 INFO pupa: save membership 5ed7988a-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"legislature\"} as membership_5ed79c90-7b6e-11e8-9e19-02e29baaa692.json\n02:31:00 INFO pupa: save membership 5ed7988a-7b6e-11e8-9e19-02e29baaa692 membership in ~{\"classification\": \"party\", \"name\": \"Nonpartisan\"} as membership_5ed79ede-7b6e-11e8-9e19-02e29baaa692.json\n02:31:00 INFO scrapelib: GET - http://www.nebraskalegislature.gov/committees/standing-committees.php\n02:31:00 INFO scrapelib: GET - http://www.nebraskalegislature.gov/committees/select-committees.php\n02:31:01 WARNING pupa: No members found in Select committees committee.\n02:31:01 WARNING pupa: No members found in Special committees committee.\nTraceback (most recent call last):\n  File \"/opt/openstates/venv-pupa//bin/pupa\", line 11, in <module>\n    load_entry_point('pupa', 'console_scripts', 'pupa')()\n  File \"/opt/openstates/venv-pupa/src/pupa/pupa/cli/__main__.py\", line 68, in main\n    subcommands[args.subcommand].handle(args, other)\n  File \"/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py\", line 260, in handle\n    return self.do_handle(args, other, juris)\n  File \"/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py\", line 305, in do_handle\n    report['scrape'] = self.do_scrape(juris, args, scrapers)\n  File \"/opt/openstates/venv-pupa/src/pupa/pupa/cli/commands/update.py\", line 173, in do_scrape\n    report[scraper_name] = scraper.do_scrape(**scrape_args)\n  File \"/opt/openstates/venv-pupa/src/pupa/pupa/scrape/base.py\", line 120, in do_scrape\n    raise ScrapeError('no objects returned from {} scrape'.format(self.__class__.__name__))\npupa.exceptions.ScrapeError: no objects returned from NECommitteeScraper scrape\nloaded Open States pupa settings...\nne (scrape, import)\n  bills: {}\n  votes: {}\n  people: {}\n  committees: {}\n```\n\nVisit http://bobsled.openstates.org for more info.\n\n", "before_files": [{"content": "import re\n\nfrom pupa.scrape import Scraper, Organization\n\nfrom openstates.utils import LXMLMixin\n\n\nclass NECommitteeScraper(Scraper, LXMLMixin):\n    def _scrape_standing_committees(self):\n        \"\"\"Scrapes the Standing Committees page of the Nebraska state\n        legislature.\"\"\"\n        main_url = 'http://www.nebraskalegislature.gov/committees/standing-committees.php'\n        page = self.lxmlize(main_url)\n\n        committee_nodes = self.get_nodes(\n            page,\n            '//div[@class=\"main-content\"]/div[@class=\"panel panel-leg\"][1]/'\n            'div[@class=\"list-group\"]/a[@class=\"list-group-item\"]')\n\n        for committee_node in committee_nodes:\n            committee_page_url = committee_node.attrib['href']\n            committee_page = self.lxmlize(committee_page_url)\n\n            name_text = self.get_node(\n                committee_page,\n                '//div[@class=\"container view-front\"]/div[@class=\"row\"]/'\n                'div[@class=\"col-sm-6 col-md-7\"]/h1/text()[normalize-space()]')\n            name = name_text.split()[0:-1]\n\n            committee_name = ''\n            for x in range(len(name)):\n                committee_name += name[x] + ' '\n            committee_name = committee_name[0: -1]\n\n            org = Organization(name=committee_name, chamber='legislature',\n                               classification='committee')\n\n            members = self.get_nodes(\n                committee_page,\n                '//div[@class=\"col-sm-4 col-md-3 ltc-col-right\"][1]/'\n                'div[@class=\"block-box\"][1]/ul[@class=\"list-unstyled '\n                'feature-content\"]/li/a/text()[normalize-space()]')\n\n            for member in members:\n                member_name = re.sub(r'\\Sen\\.\\s+', '', member)\n                member_name = re.sub(r', Chairperson', '', member_name).strip()\n                if 'Chairperson' in member:\n                    member_role = 'Chairperson'\n                else:\n                    member_role = 'member'\n                org.add_member(member_name, member_role)\n\n            org.add_source(main_url)\n            org.add_source(committee_page_url)\n\n            yield org\n\n    def _scrape_select_special_committees(self):\n        \"\"\"Scrapes the Select and Special Committees page of the\n        Nebraska state legislature.\"\"\"\n        main_url = 'http://www.nebraskalegislature.gov/committees/select-committees.php'\n        page = self.lxmlize(main_url)\n\n        committee_nodes = self.get_nodes(\n            page,\n            '//div[@class=\"main-content\"]/div[@class=\"panel panel-leg\"]')\n\n        for committee_node in committee_nodes:\n            committee_name = self.get_node(\n                committee_node,\n                './/h2[@class=\"panel-title\"]/text()[normalize-space()]')\n\n            if committee_name is None:\n                committee_name = self.get_node(\n                    committee_node,\n                    './/h2[@class=\"panel-title\"]/a/text()[normalize-space()]')\n\n            org = Organization(name=committee_name, chamber='legislature',\n                               classification='committee')\n            org.add_source(main_url)\n\n            members = self.get_nodes(\n                committee_node,\n                './div[@class=\"list-group\"]/a[@class=\"list-group-item\"]/'\n                'text()[normalize-space()]')\n\n            for member in members:\n                member_name = re.sub(r'\\Sen\\.\\s+', '', member)\n                member_name = re.sub(r', Chairperson', '', member_name).strip()\n                if 'Chairperson' in member:\n                    member_role = 'Chairperson'\n                else:\n                    member_role = 'member'\n                org.add_member(member_name, member_role)\n\n            if not org._related:\n                self.warning('No members found in {} committee.'.format(\n                    org.name))\n            else:\n                yield org\n\n    def scrape(self):\n        yield from self._scrape_standing_committees()\n        yield from self._scrape_select_special_committees()\n", "path": "openstates/ne/committees.py"}], "after_files": [{"content": "import re\n\nfrom pupa.scrape import Scraper, Organization\n\nfrom openstates.utils import LXMLMixin\n\n\nclass NECommitteeScraper(Scraper, LXMLMixin):\n    def _scrape_standing_committees(self):\n        \"\"\"Scrapes the Standing Committees page of the Nebraska state\n        legislature.\"\"\"\n        main_url = 'http://www.nebraskalegislature.gov/committees/standing-committees.php'\n        page = self.lxmlize(main_url)\n\n        committee_nodes = self.get_nodes(\n            page,\n            '//a[@class=\"accordion-switch\"][contains(text(), \"Standing Committees\")]'\n            '/ancestor::div[@class=\"panel panel-leg\"]//div[@class=\"list-group\"]'\n            '/a[@class=\"list-group-item\"]')\n\n        for committee_node in committee_nodes:\n            committee_page_url = committee_node.attrib['href']\n            committee_page = self.lxmlize(committee_page_url)\n\n            name_text = self.get_node(\n                committee_page,\n                '//div[@class=\"container view-front\"]/div[@class=\"row\"]/'\n                'div[@class=\"col-sm-6 col-md-7\"]/h1/text()[normalize-space()]')\n            name = name_text.split()[0:-1]\n\n            committee_name = ''\n            for x in range(len(name)):\n                committee_name += name[x] + ' '\n            committee_name = committee_name[0: -1]\n\n            org = Organization(name=committee_name, chamber='legislature',\n                               classification='committee')\n\n            members = self.get_nodes(\n                committee_page,\n                '//div[@class=\"col-sm-4 col-md-3 ltc-col-right\"][1]/'\n                'div[@class=\"block-box\"][1]/ul[@class=\"list-unstyled '\n                'feature-content\"]/li/a/text()[normalize-space()]')\n\n            for member in members:\n                member_name = re.sub(r'\\Sen\\.\\s+', '', member)\n                member_name = re.sub(r', Chairperson', '', member_name).strip()\n                if 'Chairperson' in member:\n                    member_role = 'Chairperson'\n                else:\n                    member_role = 'member'\n                org.add_member(member_name, member_role)\n\n            org.add_source(main_url)\n            org.add_source(committee_page_url)\n\n            yield org\n\n    def _scrape_select_special_committees(self):\n        \"\"\"Scrapes the Select and Special Committees page of the\n        Nebraska state legislature.\"\"\"\n        main_url = 'http://www.nebraskalegislature.gov/committees/select-committees.php'\n        page = self.lxmlize(main_url)\n\n        committee_nodes = self.get_nodes(\n            page,\n            '//a[contains(@class, \"accordion-switch\")]'\n            '/ancestor::div[@class=\"panel panel-leg\"]')\n\n        for committee_node in committee_nodes:\n            committee_name = self.get_node(\n                committee_node,\n                './/h2[@class=\"panel-title\"]/text()[normalize-space()]')\n\n            if committee_name is None:\n                committee_name = self.get_node(\n                    committee_node,\n                    './/h2[@class=\"panel-title\"]/a/text()[normalize-space()]')\n\n            org = Organization(name=committee_name, chamber='legislature',\n                               classification='committee')\n            org.add_source(main_url)\n\n            members = self.get_nodes(\n                committee_node,\n                './/a[@class=\"list-group-item\"]'\n                '/text()[normalize-space()]')\n\n            for member in members:\n                member_name = re.sub(r'\\Sen\\.\\s+', '', member)\n                member_name = re.sub(r', Chairperson', '', member_name).strip()\n                if 'Chairperson' in member:\n                    member_role = 'Chairperson'\n                else:\n                    member_role = 'member'\n                org.add_member(member_name, member_role)\n\n            if not org._related:\n                self.warning('No members found in {} committee.'.format(\n                    org.name))\n            else:\n                yield org\n\n    def scrape(self):\n        yield from self._scrape_standing_committees()\n        yield from self._scrape_select_special_committees()\n", "path": "openstates/ne/committees.py"}]}