Scrap условные заявления (если) не работает - PullRequest
0 голосов
/ 12 ноября 2019

Я пытаюсь извлечь две точки данных в серии веб-страниц (1. location и 2.company), хотя, когда я создаю оператор «if» в коде, кажется, что он не следует правильной последовательности«если» условно.

Хотя, когда я запускаю обе строки по отдельности, они извлекают правильный объем данных

Например, поле «location», указанное в коде, должно извлекать данные в каждой строке. Так что, если не в location_1, данные будут присутствовать в location_2.

Есть идеи, что может быть не так с моей структурой кода ?? :(

import re
import json
import scrapy
import boto3
from scrapy import Request
from scrapy.crawler import CrawlerProcess
from scrapy.linkextractors import LinkExtractor
from scrapy.loader.processors import TakeFirst, MapCompose, Join
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
from scrapy.selector import Selector
from scrapy import Item
from bs4 import BeautifulSoup
import urllib.request



class JobsSpider1(scrapy.Spider):
    name = "dev"
    allowed_domains = ["indeed.com"]
    start_urls = ["https://www.indeed.com/jobs?q=%22owner+operator%22&l=augusta"]
#

    custom_settings = {
        'FEED_FORMAT': 'jsonlines',
        'FEED_URI':'test_run_augusta-indeed-%(time)s.json',
        'FEED_EXPORT_ENCODING':'utf-8'
        }

#
    def parse(self, response):
        #jobs = response.xpath("//div[contains(@class,'jobsearch-SerpJobCard unifiedRow row result clickcard')]").getall()
        jobs = response.xpath('//div[@class="jobsearch-SerpJobCard unifiedRow row result"]')
  #      soup = BeautifulSoup(response.text, 'html.parser')
        for job in jobs:

            #post_id = job.xpath(".//*[@class='title']/div/@id").getall()
            title = job.xpath(".//*[@class='title']/a/@title").get(default='not-found')
            posting_link = job.xpath('*//@href').get(default='not-found')
            posting_url = "https://indeed.com" + posting_link
            company = job.xpath(".//span[@class='company']//a/text()").get(default='not-found')
            if company is None:
                company = job.xpath(".//span[@class='company']/text()").get(default='not-found')
            location = job.xpath(".//*[@class='sjcl']/span/text()").get(default='not-found')
            if location is None:
                location = job.xpath(".//div[@class='location accessible-contrast-color-location']/text()").get(default='not-found')

            yield Request(posting_url, callback=self.parse_page, meta={'posting_url':posting_url, 'title':title, 'location':location, 'company':company})


        relative_next_url = response.xpath('//link[@rel="next"]/@href').get()
        absolute_next_url = "https://indeed.com" + relative_next_url
#
        yield Request(absolute_next_url, callback=self.parse)
#
    def parse_page(self, response):
        title = response.meta.get('title')
        location = response.meta.get('location')
        company = response.meta.get('company')
        posting_url = response.meta.get('posting_url')


        posted_on_date= response.xpath('//*[@class="jobsearch-JobMetadataFooter"]/text()').get(default='not-found')
#
#
        yield{
        #'posting_url':posting_url,
        'posted_on_date':posted_on_date,
        'title':title,
        'location':location,
        'company':company,
        'posting_url':posting_url,
        #'location_3':location_3
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...