我写了这段代码,但无法获得结果。这是我第一次尝试这个,我不知道我做错了什么。我运行并仅获取网站顶部团队的信息,而不是其他团队的信息。
import scrapy
from bs4 import BeautifulSoup
from scrapy.item import Field, Item
from scrapy.spiders import CrawlSpider
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import ItemLoader
from scrapy.loader.processors import Join
class FichaClub(Item):
nombre = Field()
email = Field()
zona = Field()
class SacaClubes(CrawlSpider):
name="Spider100"
start_urls = ["http://www.ecuafutbol.org/web/asociaciones.php"]
allowed_domains = ['ecuafutbol.org']
rules = (
Rule(LinkExtractor(allow='asociacion_detalle.php*')),
Rule(LinkExtractor(allow='club.php*'), callback= 'parse_items'),
)
def parse_items(self, response):
item = scrapy.loader.ItemLoader(FichaClub(), response)
item.add_xpath('email','//a[starts-with(@href, "mail")]/text()')
item.add_xpath('nombre','//*[@id="gallery-post-1511"]/article/div/div/div/p/strong[1]/text()')
yield item.load_item()
最佳答案
如果我错了,请纠正我,但看起来你正试图从垫底的球队中剔除。要抓取此数据,您必须指定 parse_items 来搜索 <div class="table-responsive">
.
然后,您可以遍历列表并打印出/对团队名称执行任何您想要的操作。这是我尝试使用的示例
soccer = BeautifulSoup(start_urls, 'html.parser')
table = soccer.findAll("div", class_="table-responsive")
teams = []
for line in table:
team_found = re.findall(r'([A-Z]\w+-*\w*)', line)
teams = teams + team_found
试试这个。如果有问题,请修改行 table = soccer.findAll("div", class_="table-responsive")
并将类名称更改为该表内的其他元素。确保使用 Chrome 的检查功能来分离 HTML。
希望这对您有帮助!
关于python - 如何使用Python Scrapy从该网站获取信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066089/