title: Can't parse some content using a customized method
body: <p>I've written a script using scrapy to get the <code>name</code>, <code>phone</code> number and <code>email</code> from a website. The content I'm after are available in two diferent links, as in <code>name</code> and <code>phone</code> in one link and the <code>email</code> is in another link. I've used here <code>yellowpages.com</code> as an example and tried to implement the logic in such a way so that I can parse the <code>email</code> even when I'm in it's landing page. It's a requirement that I can't use <strong><em>meta</em></strong>. However, I used <code>requests</code> and <code>BeautifulSoup</code> in combination with scrapy to accomplish the job complying the above condition but it is real slow.</p>
  
  <p>Working one (along with <code>requests</code> and <code>BeautifulSoup</code>):</p>
  
  <pre><code>import scrapy
  import requests
  from bs4 import BeautifulSoup
  from scrapy.crawler import CrawlerProcess
  
  def get_email(target_link):
      res = requests.get(target_link)
      soup = BeautifulSoup(res.text,"lxml")
      email = soup.select_one("a.email-business[href^='mailto:']")
      if email:
          return email.get("href")
      else:
          return None
  
  class YellowpagesSpider(scrapy.Spider):
      name = "yellowpages"
      start_urls = ["https://www.yellowpages.com/search?search_terms=Coffee+Shops&amp;geo_location_terms=San+Francisco%2C+CA"]
  
      def parse(self,response):
          for items in response.css("div.v-card .info"):
              name = items.css("a.business-name &gt; span::text").get()
              phone = items.css("div.phones::text").get()
              email = get_email(response.urljoin(items.css("a.business-name::attr(href)").get()))
              yield {"Name":name,"Phone":phone,"Email":email}
  
  if __name__ == "__main__":
      c = CrawlerProcess({
          'USER_AGENT': 'Mozilla/5.0',
      })
      c.crawl(YellowpagesSpider)
      c.start()
  </code></pre>
  
  <p>I'm trying to mimic the above concept without <code>requests</code> and <code>BeautifulSoup</code> but can't make it work.</p>
  
  <pre><code>import scrapy
  from scrapy.crawler import CrawlerProcess
  
  class YellowpagesSpider(scrapy.Spider):
      name = "yellowpages"
      start_urls = ["https://www.yellowpages.com/search?search_terms=Coffee+Shops&amp;geo_location_terms=San+Francisco%2C+CA"]
  
      def parse(self,response):
          for items in response.css("div.v-card .info"):
              name = items.css("a.business-name &gt; span::text").get()
              phone = items.css("div.phones::text").get()
              email_link = response.urljoin(items.css("a.business-name::attr(href)").get())
  
              #CANT APPLY THE LOGIC IN THE FOLLOWING LINE
  
              email = self.get_email(email_link)
              yield {"Name":name,"Phone":phone,"Email":email}
  
      def get_email(self,link):
          email = response.css("a.email-business[href^='mailto:']::attr(href)").get()
          return email
  
  if __name__ == "__main__":
      c = CrawlerProcess({
          'USER_AGENT': 'Mozilla/5.0',
      })
      c.crawl(YellowpagesSpider)
      c.start()
  </code></pre>
  
  <p><strong><em>How can I make my second script work mimicking the first script?</em></strong></p>