我正在尝试进行网页抓取,我遇到了Python/Scrapy
的一些问题。
我已经隔离了我想要去的链接,但无法弄清楚如何去那里刮取更多数据。到目前为止我所拥有的是这样的:
def parse_site(self, response):
sel = Selector(response)
sites = sel.xpath('//a')
# This part works and is responsible for getting only the links I want
sites = [site for site in sites if "." in str(site.xpath('text()').extract())]
items = []
for site in sites:
item = DomainManagerItem()
dName = str(site.xpath('text()').extract())[3:-2]
item['domainName'] = dName
此时我想将下一页的信息存储到项目的第二个字段中。我正在尝试执行以下操作。我将基地址存储在BASE_ADDRESS
中,并使用newPath = str(site.xpath("@href").extract())
来提取地址的第二部分,如果我print
输出BASE_ADDRESS + newPath
,则可以使用 item['totalUsers'] = self.parse_client(ResponseObj)
正是我在寻找的东西。我现在正在做的是尝试使用另一个模块从下一页获得一些东西。但是,我无法让它发挥作用。它看起来像这样。
totalUsers
我不确定如何获得正确的响应对象并尝试了许多不同的东西。虽然不能让它工作。我想我可以解析下一个文件并从中获取{{1}},这只是将它发送到下一个模块的问题。
感谢您的帮助。
答案 0 :(得分:1)
事实证明,有些事情我对Python并不了解并试图掌握scrapy。这是我使用的工作解决方案..
def parse_site(self, response):
global BASE_WEBSITE
sel = Selector(response)
sites = sel.xpath('//a') # xpath for the sites
# To get the desc. of the <a> tag use sel.xpath('//a/text()').extract()
# Get all the websites that would lead to clients.
sites = [site for site in sites if "." in str(site.xpath('text()').extract())]
# items = []
for site in sites:
item = DomainManagerItem()
# Get the Description and trim it
dName = str(site.xpath('text()').extract())[3:-2]
# Get the Path and trim it
newPath = "https://" + BASE_WEBSITE + (str(site.xpath("@href").extract())[3:-2])
item['domainName'] = dName
yield Request(url = newPath, callback = self.parse_client, meta = {'item':item})
def parse_client(self, response):
sel = Selector(response)
ite = response.meta['item']
site = sel.xpath('//td')
ite['totalUsers'] = str(site[8].xpath('text()').extract())[3:-2]
return ite