Scrap сканировать страницу URL, извлекать ценность из каждой новой страницы - PullRequest
0 голосов
/ 12 февраля 2019

Первый пост здесь, и я довольно новичок в scrapy.Я пытаюсь отсканировать страницу URL-адресов .htm: https://www.bls.gov/bls/news-release/empsit.htm#2008

и извлечь две точки данных из каждой просканированной страницы, сохраняя каждую итерацию в CSV-файле с помощью Scrapy.

В настоящее время у меня есть:

import scrapy
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

class EmpsitSpider(scrapy.Spider):
name = "EmpsitSpider"
allowed_domains = ["bls.gov"]
start_urls = [
'https://www.bls.gov/bls/news-release/empsit.htm#2008'
]

rules = [
    Rule(
        LinkExtractor(allow_domains=("bls.gov"), restrict_xpaths=('//div[@id="bodytext"]/a[following-sibling::text()[contains(., ".htm")]]')), 
        follow= True, callback= "parse_items"),
        ]

def parse_items(self, response):
    self.logger.info("bls item page %s", response.url)
    item = scrapy.Item()
    item["SA"] = response.xpath(('//*[@id="ces_table1"]/tbody/tr[138]/td[8]/span')[0].text).extract()
    item["NSA"] = response.xpath(tree.xpath('//*[@id="ces_table1"]/tbody/tr[138]/td[4]/span')[0].text).extract()
    return item

, затем бегите

    scrapy crawl EmpsitSpider -o data.csv

Я столкнулся с узким местом с помощью скрапа.Я не могу перебрать HTML-страницы.Я могу извлечь две точки данных из каждой страницы, используя их xpaths и lxml:

from lxml import html
import requests

page = 
requests.get('https://www.bls.gov/news.release/archives/empsit_01042019.htm')
tree = html.fromstring(page.content)

#part time for economic reasons, seasonally adjusted
SA = tree.xpath('//*[@id="ces_table1"]/tbody/tr[138]/td[8]/span')[0].text
print(SA)

#part time for economic reasons, not seasonally adjusted
NSA = tree.xpath('//*[@id="ces_table1"]/tbody/tr[138]/td[4]/span')[0].text
print(NSA)

Я не могу получить scrap для просмотра URL-адресов.Есть мысли о том, как поступить?Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...