MITHU
MITHU

Reputation: 164

Can't scrape different results derived from different searches instead of a single result multiple times

I've written a script to parse the linked name populated upon filling in two inputboxes in a webpage (first name and last name) taken from a csv file. That csv file contains thousands of names and I'm trying to scrape the linked name using those names.

The problem is the spider always scrapes the linked name of the last name.

How can I scrape the individual linked name associated with each search?

This is few of the first and last names chronologically for your consideration [taken from the csv file]:

ANTONIO AMADOR      ACOSTA 
JOHN ROBERT         ADAIR 
ROBERT CURTIS       ADAMEK 
CY RITCHIE          ADAMS 

I've tried like this:

import csv
import scrapy
from scrapy.crawler import CrawlerProcess

class AmsrvsSpider(scrapy.Spider):
    name = "amsrvsSpiderscript"
    lead_url = "https://amsrvs.registry.faa.gov/airmeninquiry/Main.aspx"

    def start_requests(self):
        with open("document.csv","r") as f:
            reader = csv.DictReader(f)
            itemlist = [item for item in reader]

        for item in itemlist:
            yield scrapy.Request(self.lead_url,meta={"fname":item['FIRST NAME'],"lname":item['LAST NAME']},dont_filter=True, callback=self.parse)

    def parse(self,response):
        fname = response.meta.get("fname")
        lname = response.meta.get("lname")
        payload = {item.css('::attr(name)').get(default=''):item.css('::attr(value)').get(default='') for item in response.css("input[name]")}
        payload['ctl00$content$ctl01$txtbxFirstName'] = fname
        payload['ctl00$content$ctl01$txtbxLastName'] = lname
        payload.pop('ctl00$content$ctl01$btnClear')
        yield scrapy.FormRequest(self.lead_url,formdata=payload,dont_filter=True,callback=self.parse_content)

    def parse_content(self,response):
        name = response.css("a[id$='lnkbtnAirmenName']::text").get()
        print(name)


if __name__ == "__main__":
    c = CrawlerProcess({
        'USER_AGENT': 'Mozilla/5.0',
        'DOWNLOAD_TIMEOUT' : 5,
        'LOG_LEVEL':'ERROR'
    })
    c.crawl(AmsrvsSpider)
    c.start()

This is how the result looks like in that site:

enter image description here

Current output:

CY RITCHIE  ADAMS 
CY RITCHIE  ADAMS 
CY RITCHIE  ADAMS 
CY RITCHIE  ADAMS 

Expected output:

ANTONIO AMADOR  ACOSTA 
JOHN ROBERT     ADAIR 
ROBERT CURTIS   ADAMEK 
CY RITCHIE      ADAMS 

Upvotes: 4

Views: 400

Answers (4)

Ahmed Buksh
Ahmed Buksh

Reputation: 161

Your url is being filtered after one request and that is why it is not scraping other links. You can add a custom setting dont_filter = True in order to avoid duplicate urls You can refer to this for further clearification

Upvotes: 0

MITHU
MITHU

Reputation: 164

This is how I made it successful. Turn out that cookies plays a vital role here. So, it is necessary to handle the cookies in the right way to get the desired output. I also used this COOKIES_ENABLED = True in settings.py.

Working script:

def get_fields():
    with open("brian.csv","r") as f:
        reader = csv.DictReader(f)
        itemlist = [item for item in reader]
    return itemlist

class AmsrvsSpider(scrapy.Spider):
    name = "amsrvs"
    lead_url = 'https://amsrvs.registry.faa.gov/airmeninquiry/Main.aspx'
    start_urls = ['https://amsrvs.registry.faa.gov/airmeninquiry/Main.aspx']

    def parse(self,response):
        payload = {item.css('::attr(name)').get(default=''):item.css('::attr(value)').get(default='') for item in response.css("input[name]")}
        payload.pop('ctl00$content$ctl01$btnClear')

        for i,item in enumerate(get_fields()):
            payload['ctl00$content$ctl01$txtbxFirstName'] = item['FIRST NAME']
            payload['ctl00$content$ctl01$txtbxLastName'] = item['LAST NAME']
            yield scrapy.FormRequest(self.lead_url,formdata=payload,meta={'cookiejar': i},dont_filter=True,callback=self.parse_result)

    def parse_result(self,response):
        item_content = response.css("[id$='lnkbtnAirmenName']::text").get()
        print(item_content)

Upvotes: 3

Guy
Guy

Reputation: 50949

I'm not sure what exactly went wrong, but you can simplify your code by skipping parse()

def start_requests(self):
    with open("document.csv", "r") as f:
        reader = csv.DictReader(f)
        itemlist = [item for item in reader]

    for item in itemlist:
        payload = {'__LASTFOCUS': '',
                   '__VIEWSTATE': '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',
                   '__VIEWSTATEGENERATOR': 'B59A47DA',
                   '__EVENTTARGET': '',
                   '__EVENTARGUMENT': '',
                   '__VIEWSTATEENCRYPTED': '',
                   '__EVENTVALIDATION': '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',
                   'typAirmenInquiry': '3487',
                   'ctl00$content$ctl01$txtbxLastName': f'{item["LAST NAME"]}',
                   'ctl00$content$ctl01$txtbxCertNo': '',
                   'ctl00$content$ctl01$txtbxFirstName': f'{item["FIRST NAME"]}',
                   'ctl00$content$ctl01$txtbxSearchBirthYear': '',
                   'ctl00$content$ctl01$txtbxCity': '',
                   'ctl00$content$ctl01$btnSearch': 'Search',
                   'hor': 'horizontal',
                   'vert': 'vertical'}

        yield scrapy.FormRequest(self.lead_url, formdata=payload, dont_filter=True, callback=self.parse_content)

def parse_content(self, response):
    name = response.css("a[id$='lnkbtnAirmenName']::text").get()
    print(name)

Output:

ANTONIO AMADOR  ACOSTA  
ROBERT CURTIS  ADAMEK  
CY RITCHIE  ADAMS  
JOHN ROBERT  ADAIR  

Upvotes: 0

Calimocho
Calimocho

Reputation: 378

First of all I believe that the issue you are having comes from how you are converting the DictReader object to a list.

printing itemlist gives:

[OrderedDict([('ANTONIO AMADOR', 'JOHN ROBERT'), (' ACOSTA ', ' ADAIR ')]), OrderedDict([('ANTONIO AMADOR', 'ROBERT CURTIS'), (' ACOSTA ', ' ADAMEK ')]), OrderedDict([('ANTONIO AMADOR', 'CY RITCHIE'), (' ACOSTA ', ' ADAMS ')])]

I don't think this is what you intended. To remedy this I have used csv.reader(f), which reads each row as an (fname, lname) tuple.

I have also made some other changes, as far as I can tell there is no need to request the form page again and again, so this is just requested once and then a form submission is made for each name on the list.

Finally, I also changed the use of white space, just to help with my own readability.

import csv
import scrapy
from scrapy.crawler import CrawlerProcess


class AmsrvsSpider(scrapy.Spider):
    name = "amsrvsSpiderscript"
    lead_url = "https://amsrvs.registry.faa.gov/airmeninquiry/Main.aspx"
    start_urls = ["https://amsrvs.registry.faa.gov/airmeninquiry/Main.aspx"]

    def parse(self, response):
        with open("document.csv", "r") as f:
            split_names = list(csv.reader(f))
        print(split_names)

        default_pload = {item.css('::attr(name)').get(default=''):
                         item.css('::attr(value)').get(default='')
                         for item in response.css("input[name]")
                         }
        default_pload.pop('ctl00$content$ctl01$btnClear')

        for fname, lname in split_names:
            payload = dict(default_pload)
            payload['ctl00$content$ctl01$txtbxFirstName'] = fname
            payload['ctl00$content$ctl01$txtbxLastName'] = lname
            print(fname, lname)
            yield scrapy.FormRequest(self.lead_url,
                                     formdata=payload,
                                     dont_filter=True,
                                     callback=self.parse_content
                                     )

    def parse_content(self, response):
        name = response.css("a[id$='lnkbtnAirmenName']::text").get()
        print(name)


if __name__ == "__main__":
    c = CrawlerProcess({
        'USER_AGENT': 'Mozilla/5.0',
        'DOWNLOAD_TIMEOUT': 5,
        'LOG_LEVEL': 'ERROR'
    })
    c.crawl(AmsrvsSpider)
    c.start()

This has resolved the issue you were having with not being able to generate a request for each name, and retrieves the linked name you required.

Note that document.csv I have used for testing is as follows:

ANTONIO AMADOR,ACOSTA 
JOHN ROBERT,ADAIR 
ROBERT CURTIS,ADAMEK 
CY RITCHIE,ADAMS 

Upvotes: 0

Related Questions