Первый пост здесь, и я довольно новичок в 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-адресов.Есть мысли о том, как поступить?Спасибо за вашу помощь.